计算特定日期的平均值

时间:2017-03-19 17:15:02

标签: r dataframe mean

我有两个数据帧。

我想根据第二个数据帧中特定日期定义前5天的sp变量的平均值。

例如,1997.05.05日(即1997.05.05和1997.05.01之间)的平均值和1997.05.27和1997.05.31之间的平均值计算出有值的天数(在这种情况下) 3)。

以下是变量:

sp < - c(7,9,9,4,2,5,2,9,NA,14,NA,NA,NA,NA,NA,14,25,NA,11,10,12,NA,9,NA,6,8,6,1,NA,7,NA)

Date <- c("1997-05-01","1997-05-02","1997-05-03","1997-05-04","1997-05-05",
              "1997-05-06","1997-05-07","1997-05-08","1997-05-09","1997-05-10",
              "1997-05-11","1997-05-12","1997-05-13","1997-05-14","1997-05-15",
              "1997-05-16","1997-05-17","1997-05-18","1997-05-19","1997-05-20",
              "1997-05-21","1997-05-22","1997-05-23","1997-05-24","1997-05-25",
              "1997-05-26","1997-05-27","1997-05-28","1997-05-29","1997-05-30",
              "1997-05-31")

data1 <- data.frame(sp, Date)

DateX <- c("1997-05-05","1997-05-15","1997-05-31")

data2 <- data.frame(DateX)

如何做到最好?非常感谢帮助。

这是我的预期结果(在第二个数据框中,data2):

 1. DateX  spMean 
 2. 1997-05-05 6.2
 3. 1997-05-15 NA
 4. 1997-05-31 4.6

1 个答案:

答案 0 :(得分:2)

我对初始代码进行了一些类型更改。给出以下内容...我使用lapply使用第二个对象中的日期对data1对象运行快速函数。

sp <- c(7,9,9,4,2,5,2,9,NA,14,NA,NA,NA,NA,NA,14,25,NA,11,10,12,NA,9,NA,6,8,6,1,NA,7,NA)

Date <- as.Date(c("1997-05-01","1997-05-02","1997-05-03","1997-05-04","1997-05-05",
          "1997-05-06","1997-05-07","1997-05-08","1997-05-09","1997-05-10",
          "1997-05-11","1997-05-12","1997-05-13","1997-05-14","1997-05-15",
          "1997-05-16","1997-05-17","1997-05-18","1997-05-19","1997-05-20",
          "1997-05-21","1997-05-22","1997-05-23","1997-05-24","1997-05-25",
          "1997-05-26","1997-05-27","1997-05-28","1997-05-29","1997-05-30",
          "1997-05-31"))

data1 <- data.frame(sp, Date)

DateX <- as.Date(c("1997-05-05","1997-05-15","1997-05-31"))

data2 <- data.frame(DateX)

#Add column for mean, NA values return NA
data2$spMean_na <- lapply(DateX, 
               function(m) mean(data1$sp[data1$Date >= m - 5 & data1$Date <= m]))

#Add column for mean, remove NA values
data2$spMean_na_omit <- lapply(DateX, 
                          function(m) mean(data1$sp[data1$Date >= m - 5 & data1$Date <= m], 
                                           na.rm = TRUE))

> data2
       DateX spMean_na spMean_na_omit
1 1997-05-05       6.2            6.2
2 1997-05-15        NA             14
3 1997-05-31        NA            5.5

我认为您可能需要更改预期结果。第29行的NA值为sp,且在1997-05-31的5天内。因此,根据您的要求,我应该根据我的理解返回NA