如何在R中每30分钟聚合一次
我被困在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
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行。我的问题是:
多谢各位 使用
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