我有一个文件,第一行是几行:
bacttaxa LL8388 UL8388 LL8384 LL8381 UL8382 LL8385
13603 Yokenella regensburgei 0 0.000 0.000 0.000 0.000 76.192
15068 Yokenella regensburgei 0 0.000 0.000 399.583 0.000 0.000
11518 Zobellia galactanivorans 0 83.133 200.795 79.862 90.273 29.303
19706 Zobellia galactanivorans 0 327.694 0.000 605.251 214.366 453.391
608 Zunongwangia profunda 0 0.000 0.000 0.000 0.000 96.438
3159 Zunongwangia profunda 0 14.865 23.004 28.628 11.166 53.613
如何根据第一列中的相同值获取其他列的总和,以便获得每种细菌分类的总和?任何的想法?谢谢!
答案 0 :(得分:3)
正如评论中所提到的,这是一个“聚合”问题。因此,一个明显的选择是基础R中的aggregate
函数:
aggregate(. ~ bacttaxa, x, sum)
# bacttaxa LL8388 UL8388 LL8384 LL8381 UL8382 LL8385
# 1 Yokenella regensburgei 0 0.000 0.000 399.583 0.000 76.192
# 2 Zobellia galactanivorans 0 410.827 200.795 685.113 304.639 482.694
# 3 Zunongwangia profunda 0 14.865 23.004 28.628 11.166 150.051
您还可以浏览“data.table”和“dplyr”软件包。
## A data.table approach
library(data.table)
as.data.table(x)[, lapply(.SD, sum), by = bacttaxa]
## A dplyr approach
library(dplyr)
x %>%
group_by(bacttaxa) %>%
summarise_each(funs(sum))