R 带条件的数据表分组中的求和
我不习惯使用data.table,需要一些帮助来完成这类操作 我的数据:R 带条件的数据表分组中的求和,r,data.table,R,Data.table,我不习惯使用data.table,需要一些帮助来完成这类操作 我的数据: library(data.table) x = c(rep('a', 3), rep('b', 4), 'c') y = c(1, 2, 1, 4, 4, 2, 4, 5) dt = data.frame(x , y) 我的操作:我想按x变量分组,并对y的唯一值求和 setDT(dt)[, sm := sum(y), by = list(x)] 输出为: x y sm 1: a 1 4 2: a 2 4
library(data.table)
x = c(rep('a', 3), rep('b', 4), 'c')
y = c(1, 2, 1, 4, 4, 2, 4, 5)
dt = data.frame(x , y)
我的操作:我想按x变量分组,并对y的唯一值求和
setDT(dt)[, sm := sum(y), by = list(x)]
输出为:
x y sm
1: a 1 4
2: a 2 4
3: a 1 4
4: b 4 14
5: b 4 14
6: b 2 14
7: b 4 14
8: c 5 5
但我想:
x y sm
1: a 1 3
2: a 2 3
3: a 1 3
4: b 4 6
5: b 4 6
6: b 2 6
7: b 4 6
8: c 5 5
我可能不得不使用.SD
,但我不知道如何使用
感谢您的帮助一个选项可以是:
setDT(dt)[, sm := sum(y[!duplicated(y)]), by = x]
x y sm
1: a 1 3
2: a 2 3
3: a 1 3
4: b 4 6
5: b 4 6
6: b 2 6
7: b 4 6
8: c 5 5
您可以
求和
唯一
值
library(data.table)
setDT(dt)[, sm := sum(unique(y)), x]
dt
# x y sm
#1: a 1 3
#2: a 2 3
#3: a 1 3
#4: b 4 6
#5: b 4 6
#6: b 2 6
#7: b 4 6
#8: c 5 5
另一个解决方案(复杂但有趣):
这会给Ronak Shah的解决方案增加什么吗?这不完全是我想要的,我想保留数据帧:)Thnak正是我想要的
library(data.table)
dt[,.(sum(unique(y))),by=x]
dt[, sm := unique(dt)[, sum(y), x][.SD, on = "x", V1]]