我想知道是否有办法一步完成以下任务。
我有两列,一列的字符不是唯一的,另一列是数字。
我做了:
sum<-(aggregate(x=df$numbers, by=list(df$char), FUN=sum)
sum$char <- sum$Group.1
sum$Group.1 <- NULL
df <- setDT(df)[, .N, char]
df <- merge(df,sum,by="char")
想知道是否会有其他方式,例如使用cast
这样简单但只需一步。
答案 0 :(得分:2)
如果我们需要在原始数据集中创建两个新列,请使用:=
将输出分配给&#39; char&#39;在data.table
library(data.table)
setDT(df)[, c("Sum", "Count") := list(sum(Numbers), .N) , by = char]
但是,如果我们只需要一个汇总的输出
setDT(df)[, .(Sum = sum(Numbers), Count = .N), by = char]