1

我有一个很大的清单。一些元素是字符串,一些元素是 data.tables。我想创建一个大 data.table,但只绑定 data.tables 的元素。

我知道如何在 for 循环中执行此操作,但我正在寻找更有效的方法,因为我的数据很大并且我需要一些快速的方法。

谢谢!

library(data.table)

DT1 = data.table(
  ID = c("b","b","b","a","a","c"),
  a = 1:6
)

DT2 = data.table(
  ID = c("b","b","b","a","a","c"),
  a = 11:16
)

list<- list(DT1,DT2,"string")

我正在寻找类似于做的结果,但由于我有很多条目,我不能这样做。

rbind(DT1, DT2)
4

3 回答 3

2

Filterdata.table和_rbind

library(data.table)
rbindlist(Filter(is.data.table, list_df))

#    ID  a
# 1:  b  1
# 2:  b  2
# 3:  b  3
# 4:  a  4
# 5:  a  5
# 6:  c  6
# 7:  b 11
# 8:  b 12
# 9:  b 13
#10:  a 14
#11:  a 15
#12:  c 16

数据

list_df <- list(DT1,DT2,"string")
于 2019-07-05T08:32:53.257 回答
1

我们可以使用keepfrom purrrwithbind_rows

library(tidyverse)
keep(list, is.data.table) %>%
   bind_rows
#    ID  a
# 1:  b  1
# 2:  b  2
# 3:  b  3
# 4:  a  4
# 5:  a  5
# 6:  c  6
# 7:  b 11
# 8:  b 12
# 9:  b 13
#10:  a 14
#11:  a 15
#12:  c 16

rbindlistkeep

rbindlist(keep(list, is.data.table))
于 2019-07-05T13:50:15.933 回答
0

用于sapply()生成逻辑向量来对您的子集进行子集化list

rbindlist(list[sapply(list, is.data.table)])
于 2019-07-05T08:42:54.560 回答