我有一份data.frames
R
列表的列表,我希望将它们绑定在一起。这是一个例子:
tmp <- list(
list(
list(
data.frame(x = 1:5),
data.frame(x = 6:10)
),
list(
data.frame(x = 11:15),
data.frame(x = 16:20)
)
),
list(
list(
data.frame(x = 21:25),
data.frame(x = 26:30)
),
list(
data.frame(x = 31:35),
data.frame(x = 36:40)
)
)
)
bind_rows(
bind_rows(lapply(tmp[[1]], bind_rows)),
bind_rows(lapply(tmp[[2]], bind_rows))
)
显然,这是一团糟,所以我希望有更好的方法。也许还有某种方法可以递归调用bind_rows
,以便它继续降低列表的级别,直到找到要绑定的data.frame
为止?
答案 0 :(得分:1)
这个怎么样:
Reduce(dplyr::bind_rows, unlist(unlist(tmp, FALSE), FALSE))
#Source: local data frame [40 x 1]
#
# x
# (int)
#1 1
#2 2
#3 3
#4 4
#5 5
#6 6
#7 7
#8 8
#9 9
#10 10
#.. ...
答案 1 :(得分:0)
bind_rows <- function(lst){
if(class(lst[[1]]) == "data.frame") {
return(data.table::rbindlist(lst))
} else {
bind_rows(unlist(lst, recursive = FALSE))
}
}