Используйте имена переменных в функции в dplyr для sum и cumsum - PullRequest
0 голосов
/ 08 июня 2018

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 также сильно отличается, и, похоже, он производит некоторое или рекурсивное накопление.Что опять-таки отличается от моей контрольной даты.

Если кто-то может помочь, это будет высоко ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...