我的名单很大。一些元素是字符串,一些元素是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)
答案 0 :(得分:2)
Filter
data.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")
答案 1 :(得分:1)
我们可以将keep
中的purrr
与bind_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
或将rbindlist
与keep
一起使用
rbindlist(keep(list, is.data.table))
答案 2 :(得分:0)
使用sapply()
生成逻辑向量来子集您的list
rbindlist(list[sapply(list, is.data.table)])