在 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
提前致歉,因为我确定之前有人问过这个问题,但我正在寻找一种有效的方法来最好地使用数据 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