Я собираюсь сохранить некоторые параметры в одной таблице и использовать эту информацию для агрегирования значений, связанных с отзывчивыми строками из другого набора данных. Таким образом, в приведенном ниже примере настройки возвращаемое значение для p1 будет представлять собой сумму значений всех записей в data_tibble, где число = 123, а коды являются либо «code1», либо «code2» *, а значение даты равно 2020-01- 01. И так далее для p2.
Я не знаю, как это сделать; Я пытался создать функцию, используя apply и отдельно, чтобы просто создать функцию, которая будет запускаться сама и генерировать вектор результатов (как показано ниже в функции не работает).
Любая помощь приветствуется!
Отредактировано, чтобы исправить опечатку
* Здесь это немного глупо, но у меня есть сотни различных кодов, с которыми приходится иметь дело, и в некоторых случаях будет легче исключить все, кроме нескольких, в то время как в в других случаях будет лучше просто включить горстку и т. д. c. Так что NULL, или возможность передачи, помещают в список что-то, что приведет к передаче всех записей, было бы идеально.
library(tidyverse)
library(lubridate)
#Set up Parameters
parameters_tibble <- tibble(name = character(),
number = numeric(),
acceptable_codes = list(),
unacceptable_codes = list(),
cutoff_date = date(),
.rows = NULL)
parameters_tibble$date <- as_date(parameters_tibble$date)
parameters_tibble <- add_row(parameters_tibble,
name = "param1",
number = 123,
acceptable_codes = list(c("code1", "code2")),
unacceptable_codes = list(NULL),
cutoff_date = as_date("2020-01-01"))
parameters_tibble <- add_row(parameters_tibble,
name = "param2",
number = 456,
acceptable_codes = list(NULL),
unacceptable_codes = list("code72"),
cutoff_date = as_date("2020-01-01"))
#Create sample dataset
data_tibble <- tibble(number = numeric(),
code = character(),
date = date(),
value = numeric(),
.rows=NULL)
data_tibble$date <- as_date(data_tibble$date)
data_tibble <- add_row(data_tibble,
number = rep(c(123,456),6),
code = rep(c("code1", "code2", "code3", "code4"),3),
date = as_date(rep(c("2020-01-01","2019-11-01"),6)),
value = rep(1:12))
doesnotwork <- function(dt = data_tibble, pt = parameters_tibble) {
aggregatedValues <- dt %>%
sum(
filter(number == pt$number &
code %in% pt$acceptable_codes &
!(code %in% pt$acceptable_codes) &
date >= pt$cutoff_date)
$value)
return(aggregatedValues)
}