计算某一行之前14行的一列平均值,以每一组的日期标识(年)

时间:2019-02-21 22:31:16

标签: r group-by mean

我想计算Mean.Temp.c的平均值。特定日期之前的日期,例如本示例中date2列中所示的1963-03-23。这是我所在地区1963年融雪高峰期发生的时候。我想知道在此日期之前(即1963-03-23)的10天平均气温。怎么做?我有50年的数据,每年的峰值融雪日期都不同。

example data

2 个答案:

答案 0 :(得分:0)

您可以尝试:

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)]

对于后一种情况,与日期范围无关的那几天,您将获得NA

答案 1 :(得分:0)

假设date2是一个Date字段,而您的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] apply)中,并从日期向量中获取元素。