按周或按 3 天汇总数据

Data aggregation by week or by 3 days

这是我的数据示例:

 Date        Prec       aggregated by week (output)

        1/1/1950    3.11E+00    4.08E+00

        1/2/1950    3.25E+00    9.64E+00

        1/3/1950    4.81E+00    1.15E+01

        1/4/1950    7.07E+00    

        1/5/1950    4.25E+00    

        1/6/1950    3.11E+00    

        1/7/1950    2.97E+00    

        1/8/1950    2.83E+00    

        1/9/1950    2.72E+00    

        1/10/1950   2.72E+00    

        1/11/1950   2.60E+00    

        1/12/1950   2.83E+00    

        1/13/1950   1.70E+01    

        1/14/1950   3.68E+01    

        1/15/1950   4.24E+01    

        1/16/1950   1.70E+01    

        1/17/1950   7.07E+00    

        1/18/1950   3.96E+00    

        1/19/1950   3.54E+00    

        1/20/1950   3.40E+00    

        1/21/1950   3.25E+00

我有长时间序列降水数据,我想以这样的方式汇总它(输出在第三列;我从 excel 计算)如下

如果我每周进行汇总 第一个单元格中的输出 = 第 1 天到第 7 天的平均 prec。 第二个单元格中的输出 = 8 到 14 天的平均 prec。 第 3 个单元格中的输出 = 15 到 21 天的平均 prec

如果我按 3 天进行汇总 第一个单元格中的输出 = 第 1 到 3 天的平均值。 第二个单元格中的输出 = 第 4 到 6 天的平均值。

我将为函数提供 "prec" 和 "time step" 输入。我尝试了循环和 lubridatePOSIXct 和其他一些函数,但我无法像第三列那样弄清楚输出。

我想出的一个代码 运行 没有错误,但我的输出是机器人正确的。 其中 dat 是我的数据集。

  tt=as.POSIXct(paste(dat$Date),format="%m/%d/%Y") #converting date formate 
     datZoo <- zoo(dat[,-c(1,3)], tt)
     weekly <- apply.weekly(datZoo,mean)
    prec_NLCD <-data.frame (weekly)

我也想写成函数的形式。您的建议会很有帮助。

假设末尾注释中显示的数据可重复创建每周均值 zm,然后将其与 z 合并。

(在计算点合并平均值似乎更有意义,即 merge(z, zm) 代替标记为 ## 的行,但为了与问题中显示的输出保持一致它们放在下面数据的开头。)

library(zoo)

z <- read.zoo(text = Lines, header = TRUE, format = "%m/%d/%Y")

zm <- rollapplyr(z, 7, by = 7, mean)
merge(z, zm = zoo(coredata(zm), head(time(z), length(zm)))) ##

给予:

               z        zm
1950-01-01  3.11  4.081429
1950-01-02  3.25  9.642857
1950-01-03  4.81 11.517143
1950-01-04  7.07        NA
1950-01-05  4.25        NA
1950-01-06  3.11        NA
1950-01-07  2.97        NA
1950-01-08  2.83        NA
1950-01-09  2.72        NA
1950-01-10  2.72        NA
1950-01-11  2.60        NA
1950-01-12  2.83        NA
1950-01-13 17.00        NA
1950-01-14 36.80        NA
1950-01-15 42.40        NA
1950-01-16 17.00        NA
1950-01-17  7.07        NA
1950-01-18  3.96        NA
1950-01-19  3.54        NA
1950-01-20  3.40        NA
1950-01-21  3.25        NA

注:

Lines <- "Date        Prec       
    1/1/1950    3.11E+00   
    1/2/1950    3.25E+00   
    1/3/1950    4.81E+00   
    1/4/1950    7.07E+00    
    1/5/1950    4.25E+00    
    1/6/1950    3.11E+00    
    1/7/1950    2.97E+00    
    1/8/1950    2.83E+00    
    1/9/1950    2.72E+00    
    1/10/1950   2.72E+00    
    1/11/1950   2.60E+00    
    1/12/1950   2.83E+00    
    1/13/1950   1.70E+01    
    1/14/1950   3.68E+01    
    1/15/1950   4.24E+01    
    1/16/1950   1.70E+01    
    1/17/1950   7.07E+00    
    1/18/1950   3.96E+00    
    1/19/1950   3.54E+00    
    1/20/1950   3.40E+00    
    1/21/1950   3.25E+00"