如何在数据框中聚合具有多列的重复行[重复]
Posted
技术标签:
【中文标题】如何在数据框中聚合具有多列的重复行[重复]【英文标题】:How to aggregate duplicate rows with multiple columns in data frame [duplicate] 【发布时间】:2017-10-29 01:03:14 【问题描述】:我有一个看起来像这样的data.frame
(但是有更多的列和行):
Gene Cell1 Cell2 Cell3
1 A 2 7 8
2 A 5 2 9
3 B 2 7 8
4 C 1 4 3
我想对Gene
中具有相同值的行求和,以获得如下结果:
Gene Cell1 Cell2 Cell3
1 A 7 9 17
2 B 2 7 8
3 C 1 4 3
根据之前问题的答案,我尝试使用aggregate
,但我无法理解如何获得上述结果。这是我尝试过的:
aggregate(df[,-1], list(df[,1]), FUN = sum)
有人知道我做错了什么吗?
【问题讨论】:
聚合结果有什么问题? 【参考方案1】:或者dplyr
:
library(dplyr)
df %>%
group_by(Gene) %>%
summarise_all(sum) %>%
data.frame() -> newdf # so that newdf can further be used, if needed
【讨论】:
其他方法也可以,但这种方法更健壮也更直观。我喜欢那个不需要声明要求和的列。【参考方案2】:aggregate(df[,-1], list(Gene=df[,1]), FUN = sum)
# Gene Cell1 Cell2 Cell3
# 1 A 7 9 17
# 2 B 2 7 8
# 3 C 1 4 3
会给你你正在寻找的输出。
【讨论】:
有一个错误,当我们运行上面的时候:Error in aggregate.data.frame(df[, -1], list(Gene = df[, 1]), FUN = sum) : arguments must have same length
@ManojKumar 请将str(df)
的输出添加到您的帖子中。
当然@lukeA在这里:Classes ‘data.table’ and 'data.frame': 4 obs. of 4 variables: $ Gene : chr "A" "A" "B" "C" $ Cell1: int 2 5 2 1 $ Cell2: int 7 2 7 4 $ Cell3: int 8 9 8 3 - attr(*, ".internal.selfref")=<externalptr>
@ManojKumar 谢谢。你有一个数据表对象;那里的索引有点不同。所以你可以例如做aggregate(df[,-1], list(Gene=df[[1]]), FUN = sum)
。但是如果你有一个数据表,你可能想利用它的优势来聚合数据; df[, lapply(.SD, sum), by=Gene]
.以上是关于如何在数据框中聚合具有多列的重复行[重复]的主要内容,如果未能解决你的问题,请参考以下文章