rbind和join-in-data.table

rbind和join-in-data.table,r,join,data.table,bind,R,Join,Data.table,Bind,我需要rbind(.)两个data.tables,其中一个比另一个多两列。我想绑定它们,但也要填充列 d1 <- data.table(group=rep(1:2,each=5), no=1:5, x= rep(c(100,200), each=5), y=rnorm(10)) d2 <- data.table(group=rep(1:2,each=2), y=rnorm(4)) > rbind(d1,d2,fill=TRUE) group no x

我需要
rbind(.)
两个data.tables,其中一个比另一个多两列。我想绑定它们,但也要填充列

d1 <- data.table(group=rep(1:2,each=5), no=1:5, x= rep(c(100,200), each=5), y=rnorm(10))
d2 <- data.table(group=rep(1:2,each=2), y=rnorm(4))

> rbind(d1,d2,fill=TRUE)
    group no   x            y
 1:     1  1 100  0.018938699
 2:     1  2 100 -1.924350449
 3:     1  3 100  0.331769790
 4:     1  4 100 -0.007978624
 5:     1  5 100 -0.216864548
 6:     2  1 200 -0.959552464
 7:     2  2 200 -0.878798805
 8:     2  3 200 -0.671132161
 9:     2  4 200 -1.329565254
10:     2  5 200  0.795662872
11:     1 NA  NA  0.312083392
12:     1 NA  NA -0.485818453
13:     2 NA  NA  1.848410165
14:     2 NA  NA  1.476295328

d1您可以通过对rbind输出执行一些组操作来完成此操作

out <- 
  rbind(d1, d2, fill = T)[, `:=`(no = 1:.N, x = x[!is.na(x)][1]), by = group]

out
#     group no   x           y
#  1:     1  1 100  0.54925252
#  2:     1  2 100  1.10898571
#  3:     1  3 100 -0.06352423
#  4:     1  4 100 -0.39246382
#  5:     1  5 100 -0.06599473
#  6:     2  1 200 -0.92048106
#  7:     2  2 200 -0.45606083
#  8:     2  3 200 -1.12622400
#  9:     2  4 200  0.54906549
# 10:     2  5 200  1.11150729
# 11:     1  6 100 -2.03593356
# 12:     1  7 100 -0.22070918
# 13:     2  6 200 -0.48830888
# 14:     2  7 200 -1.36497717

没有by=grouping的第一种方法:
setorder(rbind(d1,d2,fill=TRUE),group)[,`:=`(no=rowid(group),x=nafill(x,“locf”)][
我认为
nafill
可能需要devel版本。是的,刚刚检查过,
nafill
在devel1.12.3中。很高兴听到这个消息,我不知道数据。表得到了一个
nafill
函数!现在,如果我能得到一个
合并
,我真的能够从一些脚本中删除一些包。编辑:devel中也有一个
合并
!哇!
rbind(d1, d2[d1, on = 'group', `:=`(x = i.x, no = max(i.no))][, no := no + rowid(group)])