我想创建一个单列,其中包含一年或一个月(例如)每小时递增的日期/时间序列。我使用这样的代码来生成这个序列:
start.date<-"2012-01-15"
start.time<-"00:00:00"
interval<-60 # 60 minutes
increment.mins<-interval*60
x<-paste(start.date,start.time)
for(i in 1:365){
print(strptime(x, "%Y-%m-%d %H:%M:%S")+i*increment.mins)
}
但是,我不确定如何指定日期和小时序列的范围。另外,我一直在处理第一个小时的"00:00:00"问题。不确定指定月、年等日期/时间序列长度的最佳方法是什么?任何建议都将不胜感激。
我强烈建议您使用POSIXct
数据类型。这样,您就可以毫无问题地使用seq
,并且可以随心所欲地使用这些数据。
start <- as.POSIXct("2012-01-15")
interval <- 60
end <- start + as.difftime(1, units="days")
seq(from=start, by=interval*60, to=end)
现在你可以对你的时间戳向量做任何你想做的。
试试这个。mondate
很聪明,提前了一个月。例如,它将把1月的最后一天提前到2月的最后一天,而其他日期/时间类往往会超调到3月。chron
不使用时区,因此您无法像使用POSIXct那样获得时区错误代码。这里x
来自问题。
library(chron)
library(mondate)
start.time.num <- as.numeric(as.chron(x))
# +1 means one month. Use +12 if you want one year.
end.time.num <- as.numeric(as.chron(paste(mondate(x)+1, start.time)))
# 1/24 means one hour. Change as needed.
hours <- as.chron(seq(start.time.num, end.time.num, 1/24))