假设我有这个数据.table:
library(data.table)
dt <- data.table("value" = c(10,15,30,55,20,10,40,70,80,20,40,140),
"id" = c(1,1,1,1,2,2,2,2,3,3,3,3),
"variable" = c("V1","V1","V1","Total","V1","V1","V1","Total",
"V1","V1","V1","Total"))
value id variable
1: 10 1 V1
2: 15 1 V1
3: 30 1 V1
4: 55 1 Total
5: 20 2 V1
6: 10 2 V1
7: 40 2 V1
8: 70 2 Total
9: 80 3 V1
10: 20 3 V1
11: 40 3 V1
12: 140 3 Total
如何计算value
与id
的和,但仅当variable=="V1"
同时在variable
为Total的行中显示该和时。
我知道,我可以子集行,然后计算总和,并创建一个新的列,但然后总和不存在于行中的变量是“总”。
dt[variable != "Total", sum_value := sum(value), by = id]
value id variable sum_value
1: 10 1 V1 55
2: 15 1 V1 55
3: 30 1 V1 55
4: 55 1 Total NA
5: 20 2 V1 70
6: 10 2 V1 70
7: 40 2 V1 70
8: 70 2 Total NA
9: 80 3 V1 140
10: 20 3 V1 140
11: 40 3 V1 140
12: 140 3 Total NA
我想得到的是:
value id variable sum_value
1: 10 1 V1 55
2: 15 1 V1 55
3: 30 1 V1 55
4: 55 1 Total 55
5: 20 2 V1 70
6: 10 2 V1 70
7: 40 2 V1 70
8: 70 2 Total 70
9: 80 3 V1 140
10: 20 3 V1 140
11: 40 3 V1 140
12: 140 3 Total 140
型
4条答案
按热度按时间qq24tv8q1#
字符串
7cwmlq892#
您可以按如下方式使用
fill
字符串
fbcarpbf3#
我会这样做作为一个自我结合。也就是说,计算你想要的东西,然后把它加回原来的东西。
字符串
或者,您可以使用
ifelse
将value
设置为0,当variable=='Total'
像这样型
不管怎样
型
cigdeys34#
下面是一个
dplyr
和一个base
r选项:字符串
或更简单的基r:
型
或者一个更简单的dplyr解决方案:
型