Передача имен столбцов в виде строк в group_by и суммирование в dplyr

С dplyr, начиная с версии 0.7, методы, заканчивающиеся символом подчеркивания, например, sumrize_ group_by_, устарели, так как мы должны использовать кавычки.

См.: https://cran.r-project.org/web/packages/dplyr/vignettes/programming.html

Я пытаюсь реализовать следующий пример, используя кво и!!

Рабочий пример:

df <- data.frame(x = c("a","a","a","b","b","b"), y=c(1,1,2,2,3,3), z = 1:6)

lFG <- df %>% 
   group_by( x,y) 
lFG %>% summarize( min(z))

Тем не менее, в этом случае мне нужно реализовать столбцы для группировки и суммирования указываются как строки.

cols2group <- c("x","y")
col2summarize <- "z"

Как я могу получить тот же пример, что и выше?

4 ответа

Решение

Для этого теперь вы можете использовать _at версии глаголов

df %>%  
  group_by_at(cols2group) %>% 
  summarize_at(.vars = col2summarize, .funs = min)

Из dplyr 1.0.0 вы можете использовать across :

      library(dplyr)

cols2group <- c("x","y")
col2summarize <- "z"

df %>%
  group_by(across(all_of(cols2group))) %>%
  summarise(across(all_of(col2summarize), min)) %>%
  ungroup

#   x       y     z
#  <chr> <dbl> <int>
#1 a         1     1
#2 a         2     3
#3 b         2     4
#4 b         3     5

Другой вариант - использовать нестандартную оценку (NSE) и заставить R интерпретировать строку как имена объектов в кавычках:

cols2group <- c("x","y")
col2summarize <- "z"

df %>%  
  group_by(!!rlang::sym(cols2group)) %>% 
  summarize(min(!!rlang::sym(col2summarize)))

В rlang::sym() функция берет строки и превращает их в кавычки, которые, в свою очередь, не заключаются в кавычки !! и используется как имена в контексте dfгде они относятся к соответствующим столбцам. Как всегда, есть разные способы сделать одно и то же, и это сокращение, которое я обычно использую!

См.? Dplyr:: through для обновленного способа сделать это, поскольку group_by_at и summarize_at теперь заменены

Другие вопросы по тегам