【问题标题】:For loop for creating dataframes from a list in R用于从 R 中的列表创建数据帧的循环
【发布时间】:2020-03-27 17:53:49
【问题描述】:

我有一个包含任意数量的 25 个数据帧的列表。所以我想从列表的内容中创建 25 个数据框,然后将它们绑定为一个。本质上,对于名为 x 的列表,我想:

df1 <- as.data.frame(x[1])
dfi <- as.data.frame(x[i])
df.final = cbind(df1,dfi)

效果很好。这是我尝试但没有成功的方法:

   for (i in 1:length(x){
     df[i] = as.data.frame(x[i])
     df.final = cbind(df[i]+1)
     }

由于我很困难,我们感谢任何帮助

【问题讨论】:

  • 看看函数Reduce()data.table::rbindlist()(如果你想rbind 而不是cbind)。如果x 包含data.frames,您可以使用df_final &lt;- Reduce(cbind, x)

标签: r dataframe for-loop cbind


【解决方案1】:

尝试purrr 中的reduce 函数和dplyr 中的bind_cols 函数

本质上,您希望将数据帧列表传递给reduce,它会遍历您提供的函数,在本例中为bind_cols。这将首先将df1df2 绑定,然后将生成的数据帧与df3 绑定,等等。

library(tidyverse)

df1 <- tibble(
  x = c(1, 2, 3),
  y = c(2, 3, 4)
)

df2 <- tibble(
  a = c("a", "b", "c"),
  b = c("x", "y", "z")
)

df3 <- tibble(
  a = c("h", "n", "c"),
  b = c("q", "j", "z")
)

dfs <- list(df1, df2, df3)

result <- dfs %>%
  reduce(bind_cols)

result

# A tibble: 3 x 6
      x     y a     b     a1    b1   
  <dbl> <dbl> <chr> <chr> <chr> <chr>
1     1     2 a     x     h     q    
2     2     3 b     y     n     j    
3     3     4 c     z     c     z  

【讨论】:

  • 您可以只使用bind_cols(dfs)(不使用reduce)并获得相同的结果。
猜你喜欢
  • 2021-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-05
  • 1970-01-01
  • 2018-08-28
  • 2019-04-04
  • 2020-05-25
相关资源
最近更新 更多