根据ID汇总行数据

6

我有两列,分别为id和value。我想要将所有具有相同ID的行求和。我想要将这个结果作为一个单独的列创建,而不使用聚合函数。最好使用基于base R的方法,因为我正在尝试在Radiant应用程序中创建一个计算字段。

ID    value
456   4
456   5
781   10
781   1
123   5
321   3
123   8
321   12

寻找以下结果:
ID    total
456   9
456   9
781   11
781   11
123   13
321   15
123   13
321   15

library(data.table); setDT(df)[,total:=sum(value),ID][] 但这好像是重复的... - Colonel Beauvel
1个回答

4
我们可以使用 dplyr。我们按 'ID' 进行分组,然后使用 transmute 创建一个名为 'Total' 的新列,其值为 'value' 的 sum
library(dplyr)
df1 %>%
    group_by(ID) %>% 
    transmute(Total=sum(value))

或者使用base R中的ave函数,按照ID进行分组并计算'value'的和,以transform数据集来创建一个新的列。

transform(df1, Total= ave(value, ID, FUN=sum))[-2]

将每个唯一值计数而不是对FUN求和,可以用NROW替换吗? - dagan
在这种情况下,transmute(Count= n()) - akrun
@dagan 是的,在 group_by(ID) 之后,你可以使用它。如果你需要两个,mutate(Total=sum(value), Count=n()) - akrun
让我们 在聊天中继续这个讨论 - dagan
@Frank 不,不是。 - akrun
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接