data.table操作和合并

时间:2018-02-27 23:07:27

标签: r data.table

我有数据

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还是需要额外的包?

1 个答案:

答案 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