【发布时间】:2019-03-02 00:19:46
【问题描述】:
我有一个矩阵data 和一个list。我想在我的列表中的每个向量与我的矩阵的行名称之间找到匹配项,计算它们的平均值并将这些值添加到数据框df 中,新的数据框的名称与每个向量的名称相同列表。
我已经手动完成了,但我想知道如何使用更有效的代码以for loop 方式完成。
data <- matrix(runif(75, 5.0, 10), nrow = 15, ncol = 5)
rownames(data) <- paste0("GENE",1:15)
colnames(data) <- paste0("COL",1:5)
list <- list(n = c("GENE1","GENE2","GENE3"), s = c("GENE4", "GENE5","GENE6","GENE7"),b = c("GENE8","GENE10", "GENE12", "GENE15"))
df <- data.frame(row.names = colnames(data))
df$n <- matrixStats::rowMeans2(t(data[intersect(row.names(data),list$n),]))
df$s <- matrixStats::rowMeans2(t(data[intersect(row.names(data),list$s),]))
df$b <- matrixStats::rowMeans2(t(data[intersect(row.names(data),list$b),]))
【问题讨论】:
-
在生成随机数据时使用
set.seed,不要将变量命名为list,因为它是一个内部R函数。
标签: r for-loop dataframe matrix