以R为单位对数据帧中某个小时和月份的值进行平均

以R为单位对数据帧中某个小时和月份的值进行平均,r,R,我一直在搜索网络,但还没有找到解决这个很可能很简单的问题的方法 这是使用库“xts”的半小时数据 library(xts) data.xts <- as.xts(1:nrow(data), as.POSIXct("2007-08-24 17:30:00") + 1800 * (1:nrow(data))) data.xts <-as.data.frame(data.xts) 2007年8月的平均值等 目标是绘制每个月平均24小时的时间序列 谢谢

我一直在搜索网络,但还没有找到解决这个很可能很简单的问题的方法

这是使用库“xts”的半小时数据

library(xts)
data.xts <- as.xts(1:nrow(data), as.POSIXct("2007-08-24 17:30:00") +
                  1800 * (1:nrow(data)))
data.xts <-as.data.frame(data.xts)
2007年8月的平均值等

目标是绘制每个月平均24小时的时间序列

谢谢

试试看

library(dplyr)
res <- dat %>% 
           group_by(month=format(datetime, '%m'),
              #year=format(datetime, '%Y'), #if you need year also
              # as grouping variable
              hour=format(as.POSIXct(cut(datetime, breaks='hour')), '%H')) %>%
           summarise(Meanval=mean(val, na.rm=TRUE))   


 head(res,3)
 #  month hour     Meanval
 #1    01   00 -0.02780036
 #2    01   01 -0.06589948
 #3    01   02 -0.02166218
通过运行上面的代码,我得到了错误

   # Error: column 'datetime' has unsupported type
您可以使用
mutate
并通过
as.POSIXct
datetime
转换为
POSIXct

  res1 <-  dat %>% 
               mutate(datetime= as.POSIXct(datetime)) %>%
               group_by(month=format(datetime, '%m'),
                 #year=format(datetime, '%Y'), #if you need year also
                 # as grouping variable
                  hour=format(as.POSIXct(cut(datetime, breaks='hour')), '%H')) %>%
               summarise(Meanval=mean(val, na.rm=TRUE))  
res1%
突变(datetime=as.POSIXct(datetime))%>%
分组依据(月=格式(日期时间,“%m”),
#年份=格式(日期时间,'%Y'),#如果还需要年份
#作为分组变量
小时=格式(如.POSIXct(cut(datetime,breaks='hour'),'%H'))%%>%
总结(平均值=平均值(平均值,na.rm=真))
数据
set.seed(24)

dat如果我理解正确,您希望对给定的小时、给定的月份中的所有天的所有值进行平均,并对所有月份进行此操作。因此,将给定月份内所有日期的午夜和00:59:59之间的所有值取平均值,以此类推

我知道您希望避免使用
xts
但是
aggregate.zoo(…)
就是为此而设计的,并且避免使用
dplyr
cut

library(xts)
# creates sample dataset...
set.seed(1)
data <- rnorm(1000)
data.xts <- as.xts(data, as.POSIXct("2007-08-24 17:30:00") +
                     1800 * (1:length(data)))

# using aggregate.zoo(...)
as.hourly <- function(x) format(x,"%Y-%m %H")
result    <- aggregate(data.xts,by=as.hourly,mean)
result    <- data.frame(result)
head(result)
#                result
# 2007-08 00 0.12236024
# 2007-08 01 0.41593567
# 2007-08 02 0.22670817
# 2007-08 03 0.23402842
# 2007-08 04 0.22175078
# 2007-08 05 0.05081899
库(xts)
#创建示例数据集。。。
种子(1)

可以使用
剪切的数据
。你想每月平均休息时间
0-1小时、1-2小时等吗?每个小时,第一个平均值仅在17:00到17:30之间,第二个平均值在18:00到18:30之间,等等。你能解释一下在这种情况下如何使用
cut
吗?如果是每小时一次,为什么休息时间只有半小时
17:00和17:30
而不是17:00到18:00?17:30和18:00之间没有数据。仅17:00和17:30中的数据代表17:00的小时数。好的,但您指定了1小时的休息时间。谢谢,但有一个问题。。。如果
datetime
中有NAs怎么办?
  res1 <-  dat %>% 
               mutate(datetime= as.POSIXct(datetime)) %>%
               group_by(month=format(datetime, '%m'),
                 #year=format(datetime, '%Y'), #if you need year also
                 # as grouping variable
                  hour=format(as.POSIXct(cut(datetime, breaks='hour')), '%H')) %>%
               summarise(Meanval=mean(val, na.rm=TRUE))  
set.seed(24)
dat <- data.frame(datetime=seq(Sys.time(), by='1 hour', length.out=2000),
    val=rnorm(2000))
library(xts)
# creates sample dataset...
set.seed(1)
data <- rnorm(1000)
data.xts <- as.xts(data, as.POSIXct("2007-08-24 17:30:00") +
                     1800 * (1:length(data)))

# using aggregate.zoo(...)
as.hourly <- function(x) format(x,"%Y-%m %H")
result    <- aggregate(data.xts,by=as.hourly,mean)
result    <- data.frame(result)
head(result)
#                result
# 2007-08 00 0.12236024
# 2007-08 01 0.41593567
# 2007-08 02 0.22670817
# 2007-08 03 0.23402842
# 2007-08 04 0.22175078
# 2007-08 05 0.05081899