R 如何选择第二个data.table中的所有data.table列
我有几个data.table具有相同的列,还有一个具有一些额外的列。我想把它们全部绑定,但只在公共列上 有了data.frames,我就可以R 如何选择第二个data.table中的所有data.table列,r,data.table,R,Data.table,我有几个data.table具有相同的列,还有一个具有一些额外的列。我想把它们全部绑定,但只在公共列上 有了data.frames,我就可以 rbind(df1[,names(df2)],df2,df3,...) 我当然可以在表格中写下所有的列名 list(col1,col2,col3,col4) 但是,如果一个人有1000个变量,这是不优雅的,也不可行的 我相信有一种方法,但我无法实现-如果您能提供任何帮助,我们将不胜感激。您可以尝试: DT1 <- data.table(C
rbind(df1[,names(df2)],df2,df3,...)
我当然可以在表格中写下所有的列名
list(col1,col2,col3,col4)
但是,如果一个人有1000个变量,这是不优雅的,也不可行的
我相信有一种方法,但我无法实现-如果您能提供任何帮助,我们将不胜感激。您可以尝试:
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))
# .. "looks up one level"
res <- rbindlist(lapply(lst1, function(x) x[, ..ColstoRbind]))
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
也许你可以试试:
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))
# .. "looks up one level"
res <- rbindlist(lapply(lst1, function(x) x[, ..ColstoRbind]))
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
也许你可以试试:
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))
# .. "looks up one level"
res <- rbindlist(lapply(lst1, function(x) x[, ..ColstoRbind]))
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
也许你可以试试:
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))
# .. "looks up one level"
res <- rbindlist(lapply(lst1, function(x) x[, ..ColstoRbind]))
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
您是否尝试过rbind(df1[,names(df2),with=FALSE],df2,df3,…)
?是的,谢谢-我不知道确切原因,但我会调查一下,您是否在数据表中的任何一个表中都有NA
?您尝试过rbind(df1[,names(df2),with=FALSE],df2,df3,…)
?是的,谢谢-我不知道确切的原因,但我会调查一下,您是否在任何一个数据表中有NA
?您是否尝试过rbind(df1[,names(df2),with=FALSE],df2,df3,…)
?是的,谢谢-我不知道确切的原因,但我会调查一下,您是否在任何一个数据表中有NA
?您是否尝试过rbind(df1[,names(df2),with=FALSE],df2,df3,…)
?是的,谢谢-我不知道确切的原因,但我会调查一下,数据表中是否有NA
?我想添加一条注释。我确信这个解决方案是可行的,但它失败了,因为我拥有大量的数据(毕竟为什么要使用data.table,除非我有很多数据)——我的系统崩溃了很多次,即使我只保留了工作区中所需的最低数据。最后,我使用了rbind.fill,尽管我确保了只包含相同的列,但因为它将其转换为data.frame,似乎可以解决崩溃问题。我是本着帮助他人的精神来分享这一点的——我有12GB的RAM,我使用的是服务器version@user1617979,上面的解决方案效率低下,因为列子集在data.table中生成深度副本,即使在不必要的情况下也会生成副本,例如,当列已经符合您的要求时。问:你的R和data.table版本是什么?@Arun很高兴你的回答。我正在尝试一种data.frame解决方案,我怀疑它会效率低下。太好了!您可能需要使用1.9.3
version来使用use.names=TRUE
参数来按名称绑定rbindlist
默认情况下与名称不匹配。np,这是一个非常古老的答案,但我们正在努力突出显示,如果新学员遇到旧答案,通常不需要使用=F。我想添加注释。我确信这个解决方案是可行的,但它失败了,因为我拥有大量的数据(毕竟为什么要使用data.table,除非我有很多数据)——我的系统崩溃了很多次,即使我只保留了工作区中所需的最低数据。最后,我使用了rbind.fill,尽管我确保了只包含相同的列,但因为它将其转换为data.frame,似乎可以解决崩溃问题。我是本着帮助他人的精神来分享这一点的——我有12GB的RAM,我使用的是服务器version@user1617979,上面的解决方案效率低下,因为列子集在data.table中生成深度副本,即使在不必要的情况下也会生成副本,例如,当列已经符合您的要求时。问:你的R和data.table版本是什么?@Arun很高兴你的回答。我正在尝试一种data.frame解决方案,我怀疑它会效率低下。太好了!您可能需要使用1.9.3
version来使用use.names=TRUE
参数来按名称绑定rbindlist
默认情况下与名称不匹配。np,这是一个非常古老的答案,但我们正在努力突出显示,如果新学员遇到旧答案,通常不需要使用=F。我想添加注释。我确信这个解决方案是可行的,但它失败了,因为我拥有大量的数据(毕竟为什么要使用data.table,除非我有很多数据)——我的系统崩溃了很多次,即使我只保留了工作区中所需的最低数据。最后,我使用了rbind.fill,尽管我确保了只包含相同的列,但因为它将其转换为data.frame,似乎可以解决崩溃问题。我是本着帮助他人的精神来分享这一点的——我有12GB的RAM,我使用的是服务器version@user1617979,上面的解决方案效率低下,因为列子集在data.table中生成深度副本,即使在不必要的情况下也会生成副本,例如,当列已经符合您的要求时。问:你的R和data.table版本是什么?@Arun很高兴你的回答。我正在尝试一种data.frame解决方案,我怀疑它会效率低下。太好了!您可能需要使用1.9.3
version来使用use.names=TRUE
参数来按名称绑定rbindlist
默认情况下与名称不匹配。np,这是一个非常古老的答案,但我们正在努力突出显示,如果新学员遇到旧答案,通常不需要使用=F。我想添加注释。我确信这个解决方案是可行的,但它失败了,因为我拥有大量的数据(毕竟为什么要使用data.table,除非我有很多数据)——我的系统崩溃了很多次,即使我只保留了工作区中所需的最低数据。最后,我使用了rbind.fill,尽管我确保了只包含相同的列,但因为它将其转换为data.frame,似乎可以解决崩溃问题。我是本着帮助他人的精神来分享这一点的——我有12GB的RAM,我使用的是服务器version@user1617979,上面的解决方案效率低下,因为列子集在data.table中生成深度副本,即使在不必要的情况下也会生成副本,例如,当列已经符合您的要求时。问:你的R和data.table版本是什么?@Arun很高兴你的回答。我在尝试一种data.frame解决方案w