如何在R中每30分钟聚合一次

如何在R中每30分钟聚合一次,r,plot,time-series,aggregate,R,Plot,Time Series,Aggregate,我被困在R。我需要将每分钟的数据聚合为每30分钟一次。我的数据框如下所示: Date Time Power 2008-10-11 23:57:00 0.376 2008-10-11 23:58:00 0.374 2008-10-11 23:59:00 0.374 2008-10-12 0:00:00 0.334 2008-10-12 0:01:00 0.330 ... 2008-1

我被困在R。我需要将每分钟的数据聚合为每30分钟一次。我的数据框如下所示:

    Date        Time       Power
    2008-10-11  23:57:00   0.376
    2008-10-11  23:58:00   0.374
    2008-10-11  23:59:00   0.374
    2008-10-12  0:00:00    0.334
    2008-10-12  0:01:00    0.330
...
    2008-12-13  19:24:00   1.390
    2008-12-13  19:25:00   1.370
    2008-12-13  19:26:00   1.368
    2008-12-13  19:27:00   1.362
    2008-12-13  19:28:00   1.352
    2008-12-13  19:29:00   1.360

基本上,我有2008年的500979行数据。每分钟给出一个功率值。为了完成时间序列,我需要每30分钟聚合一次数据。这将使我在最后大约17520行。我的问题是:

  • 当电源列缺少一些值时,是否可以绘制时间序列

  • 如何将功率值聚合30分钟?(例如,0:00:00至0:29:00;0:30:00至0:59:00)


  • 多谢各位

    使用
    magrittr
    dplyr
    ,您可以生成一个新列来保存一个分组变量,该变量以时间单位表示度量值,然后
    汇总
    以计算您想要的聚合度量值。(注意
    %%
    将管道的结果保存回原始变量)

    我不确定你的时间已经是什么格式了,当我读它的时候,它只是一个字符,所以把它转换成数字小时需要一点时间。如果您已经使用了其他格式,那么这一步可能会更容易

    df %<>%
      mutate(cleanTime =
               strsplit(Time, ":") %>%
               sapply(function(x){
                 x <- as.numeric(x)
                 x[1] + x[2]/60 + x[3]/(60*60)
               })
             , roundTime = floor(cleanTime * 2)/2
             )
    
    给出:

            Date roundTime  avgPower sumPower
          <date>     <dbl>     <dbl>    <dbl>
    1 2008-10-11      23.5 0.3746667    1.124
    2 2008-10-12       0.0 0.3320000    0.664
    3 2008-12-13      19.0 1.3670000    8.202
    
    Date roundTime avgPower sumPower
    1 2008-10-11      23.5 0.3746667    1.124
    2 2008-10-12       0.0 0.3320000    0.664
    3 2008-12-13      19.0 1.3670000    8.202
    
    使用
    dplyr
    可以执行下一步操作(您可以将
    mean
    更改为聚合函数):

    将产生下一个输出:

                 DateTime  Power
                   <fctr>  <dbl>
    1 2008-10-11 23:57:00 0.3576
    2 2008-12-13 18:57:00 1.3760
    3 2008-12-13 19:27:00 1.3580
    
    DateTime电源
    1 2008-10-11 23:57:00 0.3576
    2 2008-12-13 18:57:00 1.3760
    3 2008-12-13 19:27:00 1.3580
    
    谢谢你,马克!我尝试了您的方法,首先安装了这两个包并将日期转换为数字,但仍然出现了以下错误:UseMethod中的错误(“mutate_u”):没有适用于“function”类对象的“mutate_u”方法请告知。:)
    df
    是一个函数,如果您没有用数据覆盖它的话。将其替换为您的数据名感谢M0nHook,但出现了相同的错误。请参阅我对Mark上述评论的回复。是否有一种方法可以在每小时的顶部和每半小时标记上生成“良好”的休息时间,而不是此处显示的00:57:00和00:27:00休息时间?
    df %>%
      mutate(DateTime = as.POSIXct(paste(Date, Time))) %>%
      group_by(DateTime = cut(DateTime, breaks="30 min")) %>%
      summarize(Power = mean(Power))
    
                 DateTime  Power
                   <fctr>  <dbl>
    1 2008-10-11 23:57:00 0.3576
    2 2008-12-13 18:57:00 1.3760
    3 2008-12-13 19:27:00 1.3580