我有数据
dat1 <- data.table(id=1:8,
group=c(1,1,2,2,2,3,3,3),
value=c(5,6,10,11,12,20,21,22))
dat2 <- data.table(group=c(1,2,3),
value=c(3,6,13))
我希望根据dat2$value
从每个dat1$value
中减去group
。
这可能是使用data.table
还是需要额外的包?
答案 0 :(得分:1)
使用data.table
,您可以执行以下操作:
library(data.table)
dat1[dat2, on = "group"][, new.value := value - i.value, by = "group"][]
返回:
id group value i.value new.value
1: 1 1 5 3 2
2: 2 1 6 3 3
3: 3 2 10 6 4
4: 4 2 11 6 5
5: 5 2 12 6 6
6: 6 3 20 13 7
7: 7 3 21 13 8
8: 8 3 22 13 9
或者,你可以像akrun提到的那样一步完成:
dat1[dat2, newvalue := value - i.value, on = .(group)]
id group value newvalue
1: 1 1 5 2
2: 2 1 6 3
3: 3 2 10 4
4: 4 2 11 5
5: 5 2 12 6
6: 6 3 20 7
7: 7 3 21 8
8: 8 3 22 9