У меня есть два вектора:
EventDate <- c("2018-10-31", "2018-11-16", "2018-12-02")
ThirtyDaysPriorEvent <- c("2018-10-01", "2018-10-17", "2018-11-02")
Мне нужна помощь в написании функции цикла для следующего рабочего процесса:
- Цикл по векторам для определения дат в тех же позициях индексаи хранить их в переменных.Например, первая пара дат будет EventDate [1] и ThirtyDaysPriorEvent [1].Для данных примера значениями являются «2018-10-31» и «2018-10-01».
- Используйте переменные в качестве аргументов даты в функции фильтра dplyr.Запросите БД для всех действий, которые произошли за 30 дней до каждой даты события.Сохраните результаты в фрейме данных с именем Actions30dys.
- Вычислите суммы столбцов в фрейме данных Actions30dys.
- Создайте новый столбец в фрейме данных Events, используя вычисленные значения из шага № 3.
Вот результат, которого я хочу достичь:
Новый столбец с именем «d» в кадре данных «События», полученный из агрегирующих значений в столбце «x» в кадре данных «Деятельности».
date a b c d
2018-10-31 42 60.5 152.4 16.63
2018-11-16 54 54.1 151.6 16.63
2018-12-02 63 74.2 153.5 19.95
Тем не менее, это насколько я получил:
library(dplyr)
# identifies dates in the same index position for each vector & stores results in variables
e <- EventDate[1]
e30 <- ThirtyDaysPriorEvent[1]
# uses variables to filter Activities dataframe
Activities30Dys <- Activities %>%
filter(date > e30 & date < e)
# computes sum of x activity done 30 days prior to event date
sum(Activities30Dys$x, na.rm = TRUE)
# adds new column (d) to Events dataframe
Events %>%
mutate()
Вот мои воспроизводимые данные:
Events <- structure(list(date = c("2018-10-31", "2018-11-16", "2018-12-02"
), a = c(42L, 54L, 63L), b = c(60.5, 54.1, 74.2), c = c(152.4,
151.6, 153.5)), .Names = c("date", "a", "b", "c"), row.names =
c(NA, 3L), class = "data.frame")
Activities <- structure(list(date = c("2018-09-18", "2018-09-19", "2018-10-21",
"2018-10-21", "2018-10-24", "2018-10-26", "2018-10-27", "2018-11-18",
"2018-11-19", "2018-11-21", "2018-11-24", "2018-11-26", "2018-11-27",
"2018-12-05"), x = c(3.43, 3.16, 3.2, 3.27, 3.74, 3.2, 3.22,
3.43, 3.16, 3.2, 3.74, 3.2, 3.22, 3.02), y = c(132L, 122L, 120L,
130L, 127L, 128L, 127L, 132L, 122L, 120L, 127L, 128L, 127L, 121L
)), .Names = c("date", "x", "y"), row.names = c(NA, 14L), class = "data.frame")
Как мне лучше всего достичь своей цели с помощью R?