如何组合R中数据框中特定列的重复行

时间:2014-07-13 06:36:26

标签: r dataframe rows

给定R中的数据帧,如下所示

  gen  avg_ep   avgin avg_out avg_gape avg_buc      var_ep      var_in
1   0 117.189 6.09058 16.8925  14.3930 20.2136 0.000600300 0.000646235
2   1 117.188 6.09151 16.8900  14.3880 20.2048 0.000607196 0.000619780
3   2 117.189 6.09269 16.8905  14.3860 20.2033 0.000654027 0.000745787
4   3 117.192 6.09648 16.8920  14.3875 20.2068 0.000625242 0.000767313
5   4 117.193 6.09795 16.8910  14.3854 20.2036 0.000680661 0.000943054
6   5 117.197 6.10452 16.8949  14.3887 20.2091 0.000833197 0.001068240
7   2 1.197 2 474.00  131.1 210.2091 101.000833197 01.068240

我希望通过获取已存在的gen值的行并将它们与重复行组合,将其他值的平均值分配给其他列来转换数据帧。这是一个满口通过一个例子最好清楚的。

使用前一个数据帧,您可以看到最后一行(第7行)的gen值为2.我希望该行与gen值为3(第3行)的另一行组合,然后希望第3行(avg_ep,avgin等)的列值成为两者的平均值。例如,第3行的avg_ep应为(1.197 + 117.189)/ 2。

或者,我也将数据拆分成一堆数据帧而没有重复的gen值,我一直在合并它们以获取上面的数据框,现在我正试图弄清楚如何组合它们。如果您能想到在合并过程中合并重复项的方法,请告诉我。

1 个答案:

答案 0 :(得分:2)

您可以在基础R或dplyr包中执行此操作。

阅读数据:

df <- read.table(header=TRUE, text="gen  avg_ep   avgin avg_out avg_gape avg_buc      var_ep      var_in
0 117.189 6.09058 16.8925  14.3930 20.2136 0.000600300 0.000646235
1 117.188 6.09151 16.8900  14.3880 20.2048 0.000607196 0.000619780
2 117.189 6.09269 16.8905  14.3860 20.2033 0.000654027 0.000745787
3 117.192 6.09648 16.8920  14.3875 20.2068 0.000625242 0.000767313
4 117.193 6.09795 16.8910  14.3854 20.2036 0.000680661 0.000943054
5 117.197 6.10452 16.8949  14.3887 20.2091 0.000833197 0.001068240
2 1.197 2 474.00  131.1 210.2091 101.000833197 01.068240")

总结基数R:

dfbase <- aggregate(. ~ gen, data = df, mean)

总结dplyr

library(dplyr)
dfdplyr <- df %>%
  group_by(gen) %>%
  summarise_each(funs(mean))

您可以检查它们是否给出相同的结果:

all(dfbase==dfdplyr)