【发布时间】:2021-05-24 11:33:21
【问题描述】:
我想从数据帧/矩阵中计算不同行集的某些列均值,并将它们循环到一个新的矩阵/数据帧中。
我有一个看起来像这样的 df:
>mydf=as.data.frame(matrix(1:20, nrow = 10, ncol = 10))
>mydf=cbind(Sample_ID=c(rep("A",5), rep("B",5)), mydf)
>mydf
Sample_ID V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 A 1 11 1 11 1 11 1 11 1 11
2 A 2 12 2 12 2 12 2 12 2 12
3 A 3 13 3 13 3 13 3 13 3 13
4 A 4 14 4 14 4 14 4 14 4 14
5 A 5 15 5 15 5 15 5 15 5 15
6 B 6 16 6 16 6 16 6 16 6 16
7 B 7 17 7 17 7 17 7 17 7 17
8 B 8 18 8 18 8 18 8 18 8 18
9 B 9 19 9 19 9 19 9 19 9 19
10 B 10 20 10 20 10 20 10 20 10 20
现在我想要一个新的 2 x 10 数据框中的所有行 A [2:4,2:11] 和所有行 B [7:9,2:11] 的方法。这意味着,对于每组 sample_ID(col 1),我想要行 2:4 的所有 rowmeans。
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 3 13 3 13 3 13 3 13 3 13
2 8 18 8 18 8 18 8 18 8 18
我的代码如下所示:
Means_genes <- matrix(nrow = length(unique(mydf$Sample_ID)), ncol = (length(mydf[1,])-1))
for(i in mydf[!duplicated(mydf$Sample_ID), ]$Sample_ID){
sample = mydf[mydf$Sample_ID == i, ]
samplemean=colMeans(sample[2:4,2:length(sample[1,])])
for (j in 1: length(unique(mydf$Sample_ID))){
Means_genes[j,]=c(samplemean)}
}
这给了我正确的矩阵大小,但它只填充了最后一个循环的列手段。 任何帮助将不胜感激!
【问题讨论】:
标签: r dataframe loops for-loop matrix