Разделить столбец списка на несколько целочисленных столбцов на R-кадре данных - PullRequest
1 голос
/ 10 марта 2020

У меня есть R-кадр данных с 2 столбцами: идентификатор транзакции и список связанных продуктов

Мне нужен набор данных с одинаковым количеством строк (строк на транзакцию), числом столбцы, равные всем возможным продуктам со значениями от 0 до n, в зависимости от того, сколько раз транзакция содержит этот продукт

Существует ли быстрый способ сделать это?

Воспроизводимый пример

Вход

tibble(ID = c('01', '02'),
           Products = list(c('Apple', 'Apple', 'Orange'), c('Pear')))

Выход

tibble(ID = c('01', '02'),
       Apple = c(2, 0),
       Orange = c(1, 0),
       Pear = c(0, 1))

# A tibble: 2 x 4
  ID    Apple Orange  Pear
  <chr> <dbl>  <dbl> <dbl>
1 01        2      1     0
2 02        0      0     1

1 Ответ

1 голос
/ 10 марта 2020

Вы можете сделать это с помощью unnest_longer из tidyr. Попробуйте это:

library(dplyr)
library(tidyr)

tibble(ID = c('01', '02'),
             Products = list(c('Apple', 'Apple', 'Orange'), c('Pear'))) %>% 
  unnest_longer(Products) %>% 
  count(ID, Products) %>% 
  spread(Products, n, fill = 0)
#> # A tibble: 2 x 4
#> # Groups:   ID [2]
#>   ID    Apple Orange  Pear
#>   <chr> <dbl>  <dbl> <dbl>
#> 1 01        2      1     0
#> 2 02        0      0     1

Создано в 2020-03-10 пакетом Представить (v0.3.0)

...