我在处理数据时遇到了一些问题。
说我有一个data.frame:
ind a b b c c c d
1 0.1 0.2 0.2 0.3 0.5 0.7 0.9
2 0.2 0.4 0.6 0.6 0.8 0.7 0.4
...
所以我想在处理之后,将合并具有相同名称的列并获取它们的平均值。 上面的data.frame将是:
ind a b c d
1 0.1 0.2 0.5 0.9
2 0.2 0.5 0.7 0.4
...
感谢您的阅读和帮助!!
答案 0 :(得分:0)
我认为最好的方法是计算每个列对应一个列名的列索引集,然后在每个集上运行rowMeans()
一次。
我们可以在split()
上使用colnames()
来计算列索引集作为列表。
对于矩阵:
sapply(split(seq_len(ncol(m)),colnames(m)),function(cis) rowMeans(m[,cis,drop=F]));
## a b c d ind
## [1,] 0.1 0.2 0.5 0.9 1
## [2,] 0.2 0.5 0.7 0.4 2
对于data.frame:
as.data.frame(lapply(split(seq_len(ncol(df)),colnames(df)),function(cis) rowMeans(df[cis])));
## a b c d ind
## 1 0.1 0.2 0.5 0.9 1
## 2 0.2 0.5 0.7 0.4 2
数据强>
df <- data.frame(ind=c(1L,2L),a=c(0.1,0.2),b=c(0.2,0.4),b=c(0.2,0.6),c=c(0.3,0.6),c=c(0.5,0.8
),c=c(0.7,0.7),d=c(0.9,0.4),check.names=F);
m <- as.matrix(df);