1

我有以下示例:

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)

但是,dateTime 列的类已从 POSIXct 更改为 factor:

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

为什么会这样,我怎样才能把它改回 POSIXct?

4

2 回答 2

1
 data$dateTime <- as.POSIXct(as.character( data$dateTime)) 
于 2013-05-02T18:05:48.660 回答
1

您可以使用seqfindInterval

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

然后使用bins而不是cut

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" 
于 2013-05-02T20:00:39.533 回答