Рассчитать среднее значение одного столбца для 14 строк перед определенной строкой, как определено по дате для каждой группы (год) - PullRequest
0 голосов
/ 22 февраля 2019

Я хотел бы рассчитать среднее значение Mean.Temp.c.до определенной даты, например, 1963-03-23, как показано в столбце date2 в этом примере.Это время, когда пик снеготаяния пришелся на мою территорию в 1963 году.Я хочу знать среднюю температуру за 10 дней до этой даты (т.е. 1963-03-23).Как это сделать?У меня есть данные за 50 лет, и каждый год пиковая дата таяния снега отличается.

пример данных

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Предположим, date2 - это поле даты, а ваш data.frame называется x:

start_date <- as.Date("1963-03-23")-10
end_date   <- as.Date("1963-03-23")
mean(x$Mean.Temp.c.[x$date2 >= start_date & x$date2 <= end_date])

Теперь, если вас интересует несколько лет, вы можете заключить этот код в цикл for(или [s | l] применить), извлекая элементы из вектора дат.

0 голосов
/ 22 февраля 2019

Вы можете попробовать:

library(dplyr)

df %>%
  mutate(date2 = as.Date(as.character(date2)),
         ten_day_mean = mean(Mean.Temp.c[between(date2, "1963-03-14", "1963-03-23")]))

В этом случае желаемое среднее значение будет заполнять весь столбец.

Или data.table:

library(data.table)

setDT(df)[between(as.Date(as.character(date2)), "1963-03-14", "1963-03-23"), ten_day_mean := mean(Mean.Temp.c)]

InВ последнем случае вы получите NA за те дни, которые не относятся к вашему диапазону дат.

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