Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.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 如何选择第二个data.table中的所有data.table列_R_Data.table - Fatal编程技术网

R 如何选择第二个data.table中的所有data.table列

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

我有几个data.table具有相同的列,还有一个具有一些额外的列。我想把它们全部绑定,但只在公共列上

有了data.frames,我就可以

 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