Для l oop для создания фреймов данных из списка в R - PullRequest
0 голосов
/ 27 марта 2020

У меня есть список, который содержит произвольное количество из 25 кадров данных. Поэтому я хочу создать 25 фреймов данных из содержимого списка, а затем связать их в один. В сущности, для списка с именем xi нужно:

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)
     }

Любая помощь, которую мы оценили, так как я застрял

1 Ответ

0 голосов
/ 27 марта 2020

Попробуйте функцию reduce из purrr с функцией bind_cols из dplyr

По сути, вы хотите передать свой список данных в reduce, который выполняет итерацию по предоставленной вами функции , что в данном случае составляет bind_cols. Это сначала свяжет df1 с df2, затем результирующий кадр данных с df3, et c.

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  
...