Передача имен столбцов в виде строк в 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 теперь заменены