dplyr вопрос программирования здесь.Попытка написать функцию dplyr, которая принимает имена столбцов в качестве входных данных, а также фильтрует компонент, описанный в функции.То, что я пытаюсь воссоздать, так это называется test:
#test df
x<- sample(1:100, 10)
y<- sample(c(TRUE, FALSE), 10, replace = TRUE)
date<- seq(as.Date("2018-01-01"), as.Date("2018-01-10"), by =1)
my_df<- data.frame(x = x, y =y, date =date)
test<- my_df %>% group_by(date) %>%
summarise(total = n(), total_2 = sum(y ==TRUE, na.rm=TRUE)) %>%
mutate(cumulative_a = cumsum(total), cumulative_b = cumsum(total_2)) %>%
ungroup() %>% filter(date >= "2018-01-03")
Функция, которую я тестирую, выглядит следующим образом:
cumsum_df<- function(data, date_field, cumulative_y, minimum_date = "2017-04-21") {
date_field <- enquo(date_field)
cumulative_y <- enquo(cumulative_y)
data %>% group_by(!!date_field) %>%
summarise(total = n(), total_2 = sum(!!cumulative_y ==TRUE, na.rm=TRUE)) %>%
mutate(cumulative_a = cumsum(total), cumulative_b = cumsum(total_2)) %>%
ungroup() %>% filter((!!date_field) >= minimum_date)
}
test2<- cumsum_df(data = my_df, date_field = date, cumulative_y = y, minimum_date = "2018-01-03")
Я посмотрел несколько примеров использования enquo иэтот поток приводит меня на полпути:
Использование имен переменных в функциях dplyr
Но проблема в том, что я получаю два разных вывода фрейма данных для теста 1 и теста 2. Один из выходов функции не имеет данных из столбца с логической буквой y.
Я также попробовал это вместо
cumsum_df<- function(data, date_field, cumulative_y, minimum_date = "2017-04-21") {
date_field <- enquo(date_field)
cumulative_y <- deparse(substitute(cumulative_y))
data %>% group_by(!!date_field) %>%
summarise(total = n(), total_2 = sum(data[[cumulative_y]] ==TRUE, na.rm=TRUE)) %>%
mutate(cumulative_a = cumsum(total), cumulative_b = cumsum(total_2)) %>%
ungroup() %>% filter((!!date_field) >= minimum_date)
}
test2<- cumsum_df(data= my_df, date_field = date, cumulative_y = y, minimum_date = "2018-01-04")
На основеэтот поток: Передача имени столбца data.frame в функцию
Но вывод из моего столбца test 2 также сильно отличается, и, похоже, он производит некоторое или рекурсивное накопление.Что опять-таки отличается от моей контрольной даты.
Если кто-то может помочь, это будет высоко ценится.