Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.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,我有数据 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的答案并更新生成的矩阵,那就太好了。我可以删除我自己的答案,保留你的!你不想把阿克伦的建议包括在内吗?此外,您重新发布的数据不正确。