R 数据表操作和合并
我有数据R 数据表操作和合并,r,data.table,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)) dat1使用数据表,您可以执行以下操作: libra
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))
dat1使用数据表
,您可以执行以下操作:
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
您可以通过一个步骤dat1[dat2,newvalue:=value-i.value,on=(组)]
完成此操作,然后选中dat1
。我不知道如何一步到位。稍后我会更新我的答案,否则如果你用你的解决方案回答,我会删除它。不,没关系。这只是你想法的一个变种。请保留它。如果您可以编辑您的答案以包含akrun的答案并更新生成的矩阵,那就太好了。我可以删除我自己的答案,保留你的!你不想把阿克伦的建议包括在内吗?此外,您重新发布的数据不正确。