以R为单位对数据帧中某个小时和月份的值进行平均
我一直在搜索网络,但还没有找到解决这个很可能很简单的问题的方法 这是使用库“xts”的半小时数据以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小时的时间序列 谢谢
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