R:dplyr :: bind_rows()在列表上运行?

时间:2017-06-26 16:50:32

标签: r dplyr

据我所知,dplyr :: bind_rows()仅对数据帧进行操作。为什么以下两者都相同?

# Load pkgs, set seed
library(dplyr)
set.seed(1) 

# Create toy data
foo <- list(df1 = data.frame(A = rnorm(3), B = rnorm(3)),
            df2 = data.frame(C = rnorm(3), B = rnorm(3)),
            df3 = data.frame(C = rnorm(3), A = rnorm(3)))

df1 <- bind_rows(foo)


# Combine all sources into 1 source
for (i in 1:(length(foo) - 1)){
  foo[[i+1]] <- dplyr::bind_rows(foo[[i]], foo[[i+1]])
}

# Extract final df from list
df2 <- foo[[length(foo)]]

# Check for identical
identical(df1, df2)

1 个答案:

答案 0 :(得分:2)

根据https://rdrr.io/cran/dplyr/man/bind.html

&#34;每个参数可以是数据框,可以是数据框的列表,也可以是数据框列表。&#34;

bind_rows(foo)

传递&#34;数据框列表。&#34;

虽然

bind_rows(foo[[i]], foo[[i+1]])

传递数据帧。

顺便说一句,您无法通过rbind数据框列表,这就是您必须使用的原因

do.call(rbind, foo)