R:通过取其值的平均值来合并具有相同名称的列

时间:2016-06-27 19:20:50

标签: r dataframe merge

我在处理数据时遇到了一些问题。

说我有一个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
...

感谢您的阅读和帮助!!

1 个答案:

答案 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);