gpt4 book ai didi

r - 按特定时间切割 POSIXct 以获取日常方法

转载 作者:行者123 更新时间:2023-12-04 17:10:47 27 4
gpt4 key购买 nike

我对计算时间序列数据集中特定时间段的平均值感兴趣。

给定一个这样的时间序列:

dtm=as.POSIXct("2007-03-27 05:00", tz="GMT")+3600*(1:240)
Count<-c(1:240)
DF<-data.frame(dtm,Count)

在过去,我已经能够计算出每日平均值
DF$Day<-cut(DF$dtm,breaks="day")
Day_Avg<-aggregate(DF$Count~Day,DF,mean)

但是现在我试图将一天分成特定的时间段,但我不确定如何设置我的“休息时间”。

与 0:00:24:00 的每日平均值相反,例如,我如何才能获得中午到中午的平均值?

或者更奇特的是,我如何设置中午到中午的平均值,不包括晚上 7 点到早上 6 点的夜间时间(或者相反,只包括早上 6 点到晚上 7 点的白天时间)。

最佳答案

让我快速重复您的代码。

dtm <- as.POSIXct("2007-03-27 05:00", tz="GMT")+3600*(1:240)
Count <- c(1:240)
DF<-data.frame(dtm,Count)

DF$Day<-cut(DF$dtm,breaks="day")
Day_Avg<-aggregate(DF$Count~Day,DF,mean)

如果在函数调用中每次偏移12小时,仍然可以使用 cut休息时间 "day" .我将保存从中午到中午开始的那一天,因此我将减去 12 小时。
# Get twelve hours in seconds
timeOffset <- 60*60*12
# Subtract the offset to get the start day of the noon to noon
DF$Noon_Start_Day <- cut((DF$dtm - timeOffset), breaks="day")
# Get the mean
NtN_Avg <- aggregate(DF$Count ~ Noon_Start_Day, DF, mean)

排除某些时间的一种方法是将日期转换为 POSIXlt .然后您可以访问 hour除其他事项外。
# Indicate which times are good (use whatever boolean test is needed here)
goodTimes <- !(as.POSIXlt(DF$dtm)$hour >= 19) & !(as.POSIXlt(DF$dtm)$hour <= 6)
new_NtN_Avg <- aggregate(Count ~ Noon_Start_Day, data=subset(DF, goodTimes), mean)

我在 stackoverflow 上的这个问题上找到了一些帮助: r-calculate-means-for-subset-of-a-group

关于r - 按特定时间切割 POSIXct 以获取日常方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15284943/

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