Упростить список до фрейма данных и создать новые столбцы из чисел c векторов в списке - PullRequest
0 голосов
/ 25 января 2020

У меня довольно простой список:

ls <- list(560L, 4163L, 3761L, 287:290, 4467L, 3564L, 200:202)

, где каждая строка соответствует строке во фрейме данных:

df <- enframe(c("tom", "dick", "harry", "sally", "sarah", "petra", "helen"), value = "name", name = NULL)

Поскольку некоторые элементы строки списка содержат цифры c vector это не так просто, как преобразовать список во фрейм данных и использовать bind_cols для объединения данных.

Итак, я хотел бы иметь возможность упростить список во фрейм данных и поместите каждый элемент вектора в столбец, чтобы я мог объединить с DF. Упрощенный список из этого примера будет представлять собой фрейм данных 7 строк на 4 столбца. Данные, не являющиеся репрезентативными, изменятся, и поэтому число столбцов будет представлять количество элементов в самом длинном векторе цифр c, а не только в этом примере.

Спасибо.

1 Ответ

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

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

library(tidyr)
library(dplyr)
set_names(ls, df$name) %>% 
       tibble(col = .) %>%
       unnest_wider(c(col))

или после stack вставки в 2-столбец data.frame, использовать pivot_wider

set_names(ls, df$name) %>% 
      stack %>%
      group_by(ind) %>% 
      mutate(rn = row_number()) %>% 
      ungroup %>%
      pivot_wider(names_from = ind, values_from = values)

Если мы нужно обратное

df %>% 
   mutate(val = ls) %>% 
   unnest(val) %>% 
   group_by(name) %>%
   mutate(rn = str_c('col', row_number())) %>% 
   ungroup %>% 
   pivot_wider(names_from = rn, values_from = val)

или с unnest_wider

library(stringr)
df %>% 
    mutate(val = ls) %>%
    unnest_wider(c(val), names_repair = ~ c('name', str_c('col', 1:4)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...