gpt4 book ai didi

r - 将 15 分钟的数据汇总到每小时

转载 作者:行者123 更新时间:2023-12-04 11:08:48 25 4
gpt4 key购买 nike

我有一个如下所示的数据框:

     Timedate              TotalSolar_MW
20 2013-06-01 04:45:00 13.0
21 2013-06-01 05:00:00 41.7
22 2013-06-01 05:15:00 81.8
23 2013-06-01 05:30:00 153.0
24 2013-06-01 05:45:00 270.7
25 2013-06-01 06:00:00 429.3
26 2013-06-01 06:15:00 535.4
“时间日期”是 POSIXlt ,“Total_Solar”是 numeric .时间步长为 6 月 1 日 0:00 至 6 月 24 日 24:00,间隔 15 分钟。
现在我要 aggregate季度每小时数据到每小时步骤,例如2013-06-01 06:00:00 934.8MW(81.8MW + 153.0MW + 270.7MW + 429.3MW;从05:15到06:00)
我试过这个:
 Sum <-aggregate(Total_Solar_Gesamt$TotalSolar_MW, 
list(as.POSIXlt(Total_Solar_Gesamt$Timedate)$hour), FUN=sum)
但它返回整个数据帧的每小时汇总数据,并为我提供一个新的 data.frame,其中包含 24 行和每小时的总兆瓦数。
我怎样才能改变结构,只是从每刻钟减少到每小时间隔?我尝试了 for 循环,但这也不起作用。还有 subset对我不起作用。

最佳答案

Total_Solar_Gesamt <- read.table(header=TRUE, sep=",", text="
Timedate, TotalSolar_MW
2013-06-01 04:45:00, 13.0
2013-06-01 05:00:00, 41.7
2013-06-01 05:15:00, 81.8
2013-06-01 05:30:00, 153.0
2013-06-01 05:45:00, 270.7
2013-06-01 06:00:00, 429.3
2013-06-01 06:15:00, 535.4
")

使用 cut.POSIXt将日期划分为每小时间隔:
Sum <- aggregate(Total_Solar_Gesamt["TotalSolar_MW"], 
list(hour=cut(as.POSIXct(Total_Solar_Gesamt$Timedate), "hour")),
sum)
Sum
hour TotalSolar_MW
1 2013-06-01 04:00:00 13.0
2 2013-06-01 05:00:00 547.2
3 2013-06-01 06:00:00 964.7

请注意,以上将 06:00:00 与其他 06 时间分组。如果要将小时的顶部与前一小时分组,只需从每个时间戳中减去一秒:
Sum2 <- aggregate(Total_Solar_Gesamt["TotalSolar_MW"], 
list(hour=cut(as.POSIXct(Total_Solar_Gesamt$Timedate)-1, "hour")),
sum)
Sum2
hour TotalSolar_MW
1 2013-06-01 04:00:00 54.7
2 2013-06-01 05:00:00 934.8
3 2013-06-01 06:00:00 535.4

而且,如果你想提前一小时报告你的日期,就像你的问题:
Sum2$adjustedHour <- as.POSIXct(Sum2$hour) + 3600
Sum2
hour TotalSolar_MW adjustedHour
1 2013-06-01 04:00:00 54.7 2013-06-01 05:00:00
2 2013-06-01 05:00:00 934.8 2013-06-01 06:00:00
3 2013-06-01 06:00:00 535.4 2013-06-01 07:00:00

使用 xts:
library(xts)
data.xts <- xts(Total_Solar_Gesamt$TotalSolar_MW,
as.POSIXct(Total_Solar_Gesamt$Timedate)-1)
# subtract 1 second, as discussed above
Sum.xts <- period.apply(data.xts, INDEX=endpoints(data.xts, "hours"), FUN=sum)
Sum.xts
[,1]
2013-06-01 04:59:59 54.7
2013-06-01 05:59:59 934.8
2013-06-01 06:14:59 535.4

注意如何使用 xts, Sum.xts 中的时间戳是每小时的最后时间戳。 xts 可以很容易地对齐它们:
Sum.xts <- align.time(Sum.xts, 3600)  # round up to next hour

Sum.xts
[,1]
2013-06-01 05:00:00 54.7
2013-06-01 06:00:00 934.8
2013-06-01 07:00:00 535.4

关于r - 将 15 分钟的数据汇总到每小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17389533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com