给定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值的数据框,并且我一直在合并它们以获得上面的数据框,现在正试图弄清楚如何组合它们。如果您能想到在合并过程中合并重复项的方法,请告诉我。
您可以在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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句