R 选择性轧制连接

R 选择性轧制连接,r,data.table,R,Data.table,有没有一种方法可以选择在加入时滚动哪些列?我试图建立缺少的列,有点像这样: dt <- structure(list(id = c(1L, 1L, 2L, 2L), c = c(1L, 2L, 1L, 2L), r = c(1L, 1L, 1L, 3L), ir1 = c(0.690859583206475, 0.0255513035226613, 0.381394953466952, 0.646164963953197), ir2 = c(0.869432955048978, 0.

有没有一种方法可以选择在加入时滚动哪些列?我试图建立缺少的列,有点像这样:

dt <- structure(list(id = c(1L, 1L, 2L, 2L), c = c(1L, 2L, 1L, 2L), 
r = c(1L, 1L, 1L, 3L), ir1 = c(0.690859583206475, 0.0255513035226613, 
0.381394953466952, 0.646164963953197), ir2 = c(0.869432955048978, 
0.911753778578714, 0.421218475792557, 0.653007542947307)), .Names = c("id", 
"c", "r", "ir1", "ir2"), class = c("data.table", "data.frame"
), row.names = c(NA, -4L))

expander <- expand.grid(id = 1:2, c=1:2, r=1:5)

setkey(dt, id, c, r) 
setkey(setDT(expander),id,c,r)
dt[expander, roll = TRUE]

dt对于
expander
您可以执行
CJ(1:2,1:2,1:5)
在前两列是固定数据帧时尝试。我解释得不好。很抱歉我试着使用cj,但设想它是第一个位置的数据帧,可以工作。您可以在
data.frame
中执行相同的操作。类似于
do.call(CJ,data.frame(id=1:2,c=1:2,r=1:2))
谢谢,我会尝试一下。@BrandonBertelsen
CJ
可以很容易地破坏处理过程,你可以添加输入验证,类似于
停止ifnot(prod(length(v1),length(v2),length(v3))<1e7)
,如果出现重复,则
uniqueN
。对于
expander
,您可以执行
CJ(1:2,1:2,1:5)
在前两列为固定数据帧时尝试此操作。我解释得不好。很抱歉我试着使用cj,但设想它是第一个位置的数据帧,可以工作。您可以在
data.frame
中执行相同的操作。类似于
do.call(CJ,data.frame(id=1:2,c=1:2,r=1:2))
谢谢,我会尝试一下。@BrandonBertelsen
CJ
可以很容易地破坏处理过程,你可以添加输入验证,类似于
停止ifnot(prod(length(v1),length(v2),length(v3))<1e7)
,如果出现重复,那么
uniqueN