在 R 中的一个子集上跨行应用函数

Apply function across rows over a subset in R

提前致歉,因为我确定之前有人问过这个问题,但我正在寻找一种有效的方法来最好地使用数据 table 包。

我有一个矩阵,它可以是一个数据 table 如果它可以使用包来完成,我需要按列分组但在行之间应用 mean 函数的数据对于每组列。最终结果应该是一个矩阵(或数据 table),其中包含的列的值是基于组的平均值。

set.seed(123)
testMatrix <- matrix(nrow = 15, ncol = 10)
for (i in 1:nrow(testMatrix)) {
    testMatrix[i,] <- runif(1) 
}

我知道这些值都是一样的,但这并不重要。所以现在我需要找到跨行的平均值,但对于每对列。所以最终结果应该是一个数据 table 有 5 列和 15 行,V1、V2 和 V3、V4 等之间所有行的平均值。第 1 列将有 15 个值,即所有行之间的平均值前两列的行,因此 on.The 方法将被合并到一个循环中以自动化超过 100 个数据集,这就是效率很重要的方式。

我们可以按组拆分数据并找到每个行的均值。

#Split using integer division and a generic level generator
grps <- split(1:ncol(df), gl(ncol(df) %/% 7, 7))

#Find mean of each grouped row
sapply(grps, function(ind) rowMeans(df[,ind]))
#              1         2         3         4         5
# [1,]  45.71143  45.71143  45.71143  45.71143  45.71143
# [2,]  45.82786  45.82786  45.82786  45.82786  45.82786
# [3,]  36.08286  36.08286  36.08286  36.08286  36.08286
# [4,]  60.16214  60.16214  60.16214  60.16214  60.16214
# [5,]  83.61571  83.61571  83.61571  83.61571  83.61571
# [6,]  54.36286  54.36286  54.36286  54.36286  54.36286
# [7,]  92.84571  92.84571  92.84571  92.84571  92.84571