平均时dateTime从POSIXct更改为因子-R

平均时dateTime从POSIXct更改为因子-R,r,posixct,R,Posixct,我举了以下例子: begin_date = as.POSIXlt("1990-01-01", tz = "GMT") # 30 year dataset dat = data.frame(dateTime = begin_date + (0:(24*30*20)) * (1800)) dat = within(dat,{speed = runif(length(dateTime), 1, 10) }) 我希望计算每小时平均值,因此我使用: data <- aggregate(dat[co

我举了以下例子:

begin_date = as.POSIXlt("1990-01-01", tz = "GMT")
# 30 year dataset
dat = data.frame(dateTime = begin_date + (0:(24*30*20)) * (1800))
dat = within(dat,{speed = runif(length(dateTime), 1, 10)
})
我希望计算每小时平均值,因此我使用:

data <- aggregate(dat[colnames(dat)[2:length(colnames(dat))]],
                  list(dateTime = cut(dat$dateTime,breaks = "hour")),
                  mean,
                  na.rm = TRUE)

为什么会出现这种情况,我如何才能将其更改回POSIXct?

data$dateTime您可以使用
seq
findInterval

 data$dateTime <- as.POSIXct(as.character( data$dateTime)) 
rng <- range(dat$dateTime)
rng[1] <- rng[1] - (as.numeric(rng[1]) %% 3600) #subtract remainder after div by 3600    secs
hrs <- seq(rng[1],rng[2],by="hour") #sequence by hour
bins <- hrs[findInterval(dat$dateTime, hrs)] #identify the start of hourly interval for each row in dat

?cut
说返回值是一个因素…我如何将其返回到POSIXct?如果我在函数中包含此项,它会将整个数据帧更改为POSIXct,而不仅仅是日期时间列。您可能需要再次检查此项--对我来说效果很好。但时区也需要指定,以与原始问题中的数据保持一致。这方面的一个小问题是,它不会将数据返回到最近的一小时。例如,假设dateTime的间隔为30分钟,则不能保证返回输出为每小时一个点,而不是10:30 11:30等
rng <- range(dat$dateTime)
rng[1] <- rng[1] - (as.numeric(rng[1]) %% 3600) #subtract remainder after div by 3600    secs
hrs <- seq(rng[1],rng[2],by="hour") #sequence by hour
bins <- hrs[findInterval(dat$dateTime, hrs)] #identify the start of hourly interval for each row in dat
data <- aggregate(dat[colnames(dat)[2:length(colnames(dat))]],
                  list(dateTime = bins),
                  mean,
                  na.rm = TRUE)

> class(dat$dateTime)
[1] "POSIXct" "POSIXt" 

> class(data$dateTime)
[1] "POSIXct" "POSIXt"