Преобразование списка списков в фрейм данных в R: Tidyverse-way - PullRequest
2 голосов
/ 27 января 2020

Я ищу Tidyverse способ преобразования списка списков в фрейм данных в R.

# Create a list of lists:
a <- seq(1,10,1)
b <- seq(1,20,2)

# Function to calculate the sum 
# (just an example, I am aware of the base R sum())

sum_test <- function(a=a, b=b){
  sum <- a+b
  df <- cbind(a,b,sum)
  return(df)
}

list_of_lists <- purrr::map2(a,b,sum_test)

Нетидиверсальный способ создания фрейма данных из списка списков:

df <- as.data.frame(do.call(rbind, list_of_lists))

Вопрос

Как преобразовать список списков в фрейм данных, используя tidyverse (с конвейером и без него)?

Ответы [ 3 ]

2 голосов
/ 27 января 2020

Мне нравится эта версия, так как она сохраняет читабельность, что для меня самое сильное в tidyverse

list_of_lists %>%
    map(as_tibble) %>%
    reduce(bind_rows)
1 голос
/ 27 января 2020

Вы можете использовать

purrr::map_df(list_of_lists, tibble::as_tibble)

# A tibble: 10 x 3
#      a     b   sum
#   <dbl> <dbl> <dbl>
# 1     1     1     2
# 2     2     3     5
# 3     3     5     8
# 4     4     7    11
# 5     5     9    14
# 6     6    11    17
# 7     7    13    20
# 8     8    15    23
# 9     9    17    26
#10    10    19    29
1 голос
/ 27 января 2020

Вы можете попробовать:

map2_df(.x = a, 
        .y = b, 
        ~ sum_test(.x, .y) %>%
         as.data.frame())

    a  b sum
1   1  1   2
2   2  3   5
3   3  5   8
4   4  7  11
5   5  9  14
6   6 11  17
7   7 13  20
8   8 15  23
9   9 17  26
10 10 19  29
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...