В tidyr версии 1.0.0 как упростить вложенные столбцы в списки? - PullRequest
0 голосов
/ 09 октября 2019

Я только что заметил изменение в поведении nest() с обновленным тидыром. Ранее, если вы вложили один столбец, он возвращал столбец списка, что облегчало поиск в указанном списке, скажем, для получения «наивысшей» классификации. Например:

tribble(
  ~a,   ~b,   ~c,   ~class,   ~lots_of_other_vars,
  1,    100,  150,  "lowest",  "blah",
  1,    100,  150,  "medium",  "blah",
  1,    100,  150,  "highest", "blah",
  2,    5000, 5500, "lowest",  "blah",
  2,    5000, 5500, "medium",  "blah",
  3,    342,  350,  "lowest",  "blah"
) %>% 
  nest(class) %>%
  mutate(class = case_when(
    "highest" %in% data ~ "highest",
    "medium" %in% data ~ "medium",
    TRUE ~ "lowest"
  ))

К сожалению, вместо возврата простого списка, новейшая версия функции nest возвращает фрейм данных внутри списка (list(df[,1])), нарушая мой код.

Конечно, я могу group_by все остальное, чтобы получить аналогичный результат:

tribble(
  ~a,   ~b,   ~c,   ~class,   ~lots_of_other_vars,
  1,    100,  150,  "lowest",  "blah",
  1,    100,  150,  "medium",  "blah",
  1,    100,  150,  "highest", "blah",
  2,    5000, 5500, "lowest",  "blah",
  2,    5000, 5500, "medium",  "blah",
  3,    342,  350,  "lowest",  "blah"
) %>% 
  group_by_at(vars(-class)) %>% 
  mutate(overall_class = case_when(
    "highest" %in% class ~ "highest",
    "medium" %in% class ~ "medium",
    TRUE ~ "lowest"
  )) %>% 
  select(-class) %>% 
  distinct()

Однако, это упрощенный сценарий, и я бы предпочел сохранить список классов, чтобыпосмотрим позже. Учитывая изменения в nest, какой самый простой способ получить список значений класса при вызове различных других переменных (т. Е. Какое гнездо использовалось)?

Редактировать

Это то, что я хотел бы добавить столбец со списком всех классов, наблюдаемых для этого сайта:

     a     b     c lots_of_other_vars highest_support
  <dbl> <dbl> <dbl> <chr>              <chr>          
1     1   100   150 blah               highest        
2     2  5000  5500 blah               medium         
3     3   342   350 blah               lowest
...