Фон
Использование rlang
У меня есть простая сводная функция для dplyr
, которая подсчитывает количество пропущенных наблюдений в переменной для предоставленных групп , Я хотел бы вернуть результаты в порядке убывания группировки переменных.
Пример данных
library("tidyverse")
set.seed(123)
test_data <- tibble(dates = seq.Date(
from = as.Date.character(x = "01-01-2000", format = "%d-%m-%Y"),
to = as.Date.character(x = "31-12-2010", format = "%d-%m-%Y"),
by = "day"
)) %>%
transmute(
t_year = lubridate::year(dates),
t_mnth = lubridate::month(dates),
t_day = lubridate::day(dates),
tst_var = if_else(rnorm(n()) > .8, NA_real_, rnorm(n()))
)
Сводная функция
Рабочая версия
quick_smry <- function(df, x, ...) {
group_by_vars <- enquos(...)
check_var <- enquo(x)
df %>%
group_by(!!!group_by_vars) %>%
summarise(num_missing = sum(is.na(!!check_var)))
}
Желаемые результаты
test_data %>%
group_by(t_year, t_mnth) %>%
summarise(num_missing = sum(is.na(tst_var))) %>%
arrange(desc(t_year), desc(t_mnth))
Задача
Реализация arrange(desc(x))
вызова, чтобы он мог обрабатывать каждую переменных Первоначально прошло через enquos
. Т.е. если в enquos
передано 5 группирующих переменных, это должно быть эквивалентно arrange(desc(var1)) .... arrange(desc(var5))
.
Попытка
Естественно, это не сработает:
quick_smry <- function(df, x, ...) {
group_by_vars <- enquos(...)
check_var <- enquo(x)
df %>%
group_by(!!!group_by_vars) %>%
summarise(num_missing = sum(is.na(!!check_var))) %>%
# Desc call should be created for each of the group variables
arrange(desc(!!!group_by_vars))
}