我有几个data.tables具有相同的列,并且有一些额外的列。我想把它们全部绑定,但仅限于公共列
使用data.frames我可以做到
rbind(df1[,names(df2)],df2,df3,...)
我当然可以用
形式写下所有列名 list(col1,col2,col3,col4)
但如果有1,000
个变量
我相信有一种方法,我没有到达那里 - 任何帮助将不胜感激
答案 0 :(得分:3)
可能你可以试试:
DT1 <- data.table(Col1=1:5, Col2=6:10, Col3=2:6)
DT2 <- data.table(Col1=1:4, Col3=2:5)
DT3 <- data.table(Col1=1:7, Col3=1:7)
lst1 <- mget(ls(pattern="DT\\d+"))
ColstoRbind <- Reduce(`intersect`,lapply(lst1, colnames))
res <- rbindlist(lapply(lst1, function(x) x[,ColstoRbind,with=FALSE]))
res
# Col1 Col3
# 1: 1 2
# 2: 2 3
# 3: 3 4
# 4: 4 5
# 5: 5 6
# 6: 1 2
# 7: 2 3
# 8: 3 4
# 9: 4 5
#10: 1 1
#11: 2 2
#12: 3 3
#13: 4 4
#14: 5 5
#15: 6 6
#16: 7 7
正如@Arun在评论中建议的那样,这可能会更好
rbindlist(lapply(lst1, function(x) {
if(length(setdiff(colnames(x), ColstoRbind))>0) {
x[,ColstoRbind, with=FALSE]
}
else x}))