如何在data.frames列表上递归调用dplyr中的bind_行?
我在如何在data.frames列表上递归调用dplyr中的bind_行?,r,dplyr,R,Dplyr,我在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) )
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))
)
tmp这个怎么样:
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
#.. ...
尝试此函数::
bind_rows hadley的purr包有一个flatte
函数,尽管我没有使用它。我在玩flatte<代码>展平(tmp)%%>%flatte%%>%bind_rows
将是一种方法。嗯,这不就是数据帧(x=unlist(tmp))
对于你的例子吗?@jazzurro到目前为止,反复调用flatte
似乎是最简单的解决方案。
bind_rows <- function(lst){
if(class(lst[[1]]) == "data.frame") {
return(data.table::rbindlist(lst))
} else {
bind_rows(unlist(lst, recursive = FALSE))
}
}