rbindlist仅满足条件的元素

时间:2019-07-05 08:30:46

标签: r data.table subset rbindlist

我的名单很大。一些元素是字符串,一些元素是data.tables。我想创建一个大的data.table,但仅rbind是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)

3 个答案:

答案 0 :(得分:2)

Filter data.tablerbind

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")

答案 1 :(得分:1)

我们可以将keep中的purrrbind_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))

答案 2 :(得分:0)

使用sapply()生成逻辑向量来子集您的list

rbindlist(list[sapply(list, is.data.table)])