r - R计算行平均值,每一行的不同列由另一列指示
问题描述
我想计算每一行不同列的行平均值,如另一列所示。在这个示例数据帧中,列“number”的范围是 1:11,其他 12 列命名为“block_1”到“block_12”。例如,如果“block”为 5,我想计算列的行平均值块_6 到块_12。也就是说,通过block_12,在“number”列中指示的块号的平均值。每个 ID 代表一个唯一条目,应保留所有行。我怎样才能做到这一点?
n <- 11 ; m <- 11 ; reps <- 12
dff<-as.data.frame(cbind(matrix(sample.int(11, n, replace = TRUE), n, m/n),
replicate(reps, sample(1:9, n, replace = TRUE)/10)))
myFun<- function(n = 5000) {
a <- do.call(paste0, replicate(5, sample(LETTERS, n, TRUE), FALSE))
paste0(a, sprintf("%04d", sample(9999, n, TRUE)), sample(LETTERS, n, TRUE))
}
dff$ID<-myFun(11)
dff<-data.table::setnames(dff, old = c('V1','V2','V3','V4', 'V5','V6','V7','V8','V9','V10', 'V11','V12','V13'), new = c('number','block_1','block_2','block_3','block_4', 'block_5','block_6','block_7','block_8','block_9','block_10', 'block_11','block_12'))
解决方案
这是一个基本的 R 选项:
cols <- grep('block', names(dff), value = TRUE)
n <- length(cols)
dff$mean_value <- mapply(function(x, y) mean(unlist(dff[x, cols[y:n]])),
seq(nrow(dff)), dff$number + 1)
推荐阅读
- android - 集成谷歌登录
- java - 如何根据所选配置文件在属性文件之间切换
- python - PyQt5,如何将 QGroupBox 中的 QSlider 连接到函数
- javascript - 如何在html的选择标签中创建onload java脚本选定值
- function - 使用运算符 (/x) 映射函数的问题
- c++ - C++- Saxon c/c++ 如何将 saxon 导入 Visual Studio 中的项目?
- android - SegmentedButtonGroup 不会在侦听器内更改颜色
- java - 如何使用两个键(键对、值)写入/放入 HashMap?
- php - Wordpress - 重新生成缩略图的问题
- javascript - 创建更好版本的 promise 函数