Вложенные тиблы после группировки по факторным переменным дают NULL-элементы в R - PullRequest
0 голосов
/ 28 февраля 2019

Я просматривал свой старый код R, когда наткнулся на несколько ошибок.

После выполнения каждой строки и игры с моими данными я обнаружил, что tidyr::nest() ing tibble s dplyr::group (ed) _by фактор-переменных производит один или несколько элементов NULL.

Вот пример с данными mtcars:

library(dplyr)
library(tidyr)

mtcars %>% 
  as_tibble() %>% 
  select(cyl, carb, mpg) %>% 
  mutate(cyl = factor(cyl),
         carb = factor(carb)) %>% 
  group_by(cyl, carb) %>% 
  nest()

# A tibble: 9 x 3
# cyl   carb  data            
# <fct> <fct> <list>          
#   1 6     4     <NULL>          
#   2 4     1     <tibble [5 x 1]>
#   3 6     1     <tibble [3 x 1]>
#   4 8     2     <NULL>          
#   5 8     4     <NULL>          
#   6 4     2     <tibble [6 x 1]>
#   7 8     3     <NULL>          
#   8 6     6     <NULL>          
#   9 8     8     <NULL> 

Я думал, nest() принимает факторы as.numeric() и «запутывается», когда разные переменные представляют одноименные группы.Но потом я попытался:

mtcars %>% 
  as_tibble() %>% 
  select(cyl, carb, mpg) %>%  
  mutate(cyl = factor(cyl) %>% as.numeric(),
         carb = factor(carb) %>% as.numeric()) %>% 
  group_by(cyl, carb) %>% 
  nest()

и получил тот же результат, что и при вложении с нефакторными переменными:

# A tibble: 9 x 3
# cyl  carb data            
# <dbl> <dbl> <list>          
#   1     2     4 <tibble [4 x 1]>
#   2     1     1 <tibble [5 x 1]>
#   3     2     1 <tibble [2 x 1]>
#   4     3     2 <tibble [4 x 1]>
#   5     3     4 <tibble [6 x 1]>
#   6     1     2 <tibble [6 x 1]>
#   7     3     3 <tibble [3 x 1]>
#   8     2     5 <tibble [1 x 1]>
#   9     3     6 <tibble [1 x 1]>

Сравните с:

mtcars %>% 
  as_tibble() %>% 
  select(cyl, carb, mpg) %>% 
  group_by(cyl, carb) %>% 
  nest()

# A tibble: 9 x 3
# cyl  carb data            
# <dbl> <dbl> <list>          
#   1     6     4 <tibble [4 x 1]>
#   2     4     1 <tibble [5 x 1]>
#   3     6     1 <tibble [2 x 1]>
#   4     8     2 <tibble [4 x 1]>
#   5     8     4 <tibble [6 x 1]>
#   6     4     2 <tibble [6 x 1]>
#   7     8     3 <tibble [3 x 1]>
#   8     6     6 <tibble [1 x 1]>
#   9     8     8 <tibble [1 x 1]>

Смой код работал нормально до прошлого месяца, мне интересно, обновлялся ли tidyr в последнее время и был ли изменен способ обработки групп факторов с помощью nest()?

Желательно ли вообще не вкладывать данные, сгруппированные по факторным переменным, или не group_by() по факторным переменным?

Редактировать: В выпуске , упомянутый Аосмитом, Хэдли ссылается на group_nest(), который, похоже, решает проблему ( предостережение : эта функция переупорядочивает тиббл!).Тем не менее, я все еще удивляюсь, почему nest() производит NULL ...

mtcars %>% 
  as_tibble() %>% 
  select(cyl, carb, mpg) %>% 
  mutate(cyl = factor(cyl),
         carb = factor(carb)) %>% 
  group_by(cyl, carb) %>%
  group_nest() %>% 
  unnest %>% 
  all.equal(.,
            mtcars %>% 
              as_tibble() %>% 
              select(cyl, carb, mpg) %>% 
              mutate(cyl = factor(cyl),
                     carb = factor(carb)))

# [1] TRUE

1 Ответ

0 голосов
/ 01 марта 2019

Как предположил Аосмит, это было недавно исправлено в dev-версии tidyr.Поскольку я не узнал об этом по связанной проблеме и не смог установить версию dev, я отправил этот вопрос как еще одну проблему .Хэдли только что ответила.

...