Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 带条件的数据表分组中的求和_R_Data.table - Fatal编程技术网

R 带条件的数据表分组中的求和

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

我不习惯使用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
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]]