给定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值,我一直在合并它们以获取上面的数据框,现在我正试图弄清楚如何组合它们。如果您能想到在合并过程中合并重复项的方法,请告诉我。
答案 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)