Сообщение "Добавление отсутствующих переменных группировки" в dplyr в R

У меня есть часть моего скрипта, который раньше работал, но в последнее время создается нечетное утверждение, после чего многие из моих других функций работают неправильно. Я пытаюсь выбрать 8-ю и 23-ю позиции в ранжированном списке значений для каждого сайта, чтобы найти 25-е и 75-е процентильные значения для каждого дня в году для каждого сайта в течение 30 лет. Мой подход был следующим (адаптированный для четырех линейного набора данных - срез (3) будет срезом (23) для моего полного 30-летнего набора данных обычно):

library("dplyr")

mydata

structure(list(station_number = structure(c(1L, 1L, 1L, 1L), .Label = "01AD002", class = "factor"), 
year = 1981:1984, month = c(1L, 1L, 1L, 1L), day = c(1L, 
1L, 1L, 1L), value = c(113, 8.329999924, 15.60000038, 149
)), .Names = c("station_number", "year", "month", "day", "value"), class = "data.frame", row.names = c(NA, -4L))    

  value <- mydata$value
  qu25 <- mydata %>% 
          group_by(month, day, station_number) %>% 
          arrange(desc(value)) %>% 
          slice(3) %>% 
          select(value)

Раньше я оставался бы с таблицей, которая имела бы одно значение для каждого сайта для описания 25-го процентиля (так как функция аранжировки, по-видимому, делает их наивысшими до самых низких). Однако теперь, когда я запускаю эти строки, я получаю сообщение:

Adding missing grouping variables: 'month', 'day', 'station_number'

Это сообщение не имеет для меня смысла, поскольку переменные группировки явно присутствуют в моей таблице. Кроме того, снова это работало до недавнего времени. Я пытался:

  • detatch ("plyr") - так как я загрузил его до dplyr
  • dplyr :: group_by - размещение этого непосредственно в строке group_by
  • удаление и повторная установка dplyr, хотя это было для другой проблемы, которую я имел

Любая идея, почему я могу получить это сообщение и почему он, возможно, перестает работать?

Спасибо за любую помощь.

Обновление: добавлен пример dput с одним сайтом, но значения на 1 января в течение нескольких лет. Надежда будет заключаться в том, что позиционное значение возвращается после сгруппировки, например, slice (3), мы надеемся, вернет значение 15.6 для этого меньшего подмножества.

Ответы

Ответ 1

Для обеспечения согласованности переменные группировки должны всегда присутствовать, когда они определены ранее и поэтому добавляются при выполнении select(value). ungroup должен решить эту проблему:

qu25 <- mydata %>% 
  group_by(month, day, station_number) %>%
  arrange(desc(value)) %>% 
  slice(2) %>% 
  ungroup() %>%
  select(value)

Запрашиваемый результат без предупреждений:

> mydata %>% 
+   group_by(month, day, station_number) %>%
+   arrange(desc(value)) %>% 
+   slice(2) %>% 
+   ungroup() %>%
+   select(value)
# A tibble: 1 x 1
  value
  <dbl>
1   113

Ответ 2

Вы недавно обновили dplyr? Интересно, был ли ваш вызов dplyr :: аранжировать неблагоприятным образом https://blog.rstudio.org/2016/06/27/dplyr-0-5-0/

Нарушение изменений аранжирует() снова игнорирует группировку, возвращаясь к поведению dplyr 0.3 и ранее. Это делает аранжировку() несовместимой с другими глаголами dplyr, но я думаю, что это поведение, как правило, более полезно. Несмотря на это, он не будет меняться снова, поскольку все больше изменений просто вызовут больше путаницы.

Ответ 3

Вы также можете преобразовать свой кеш в кадр данных перед оператором select, используя data.frame(). Затем dplyr теряет отслеживание ваших переменных группировки и больше не беспокоится о них.

qu25 <- mydata %>% 
      group_by(month, day, station_number) %>% 
      arrange(desc(value)) %>% 
      slice(3) %>% 
      data.frame() %>%
      select(value)