根据POSIXlt时间创建一个因子?

时间:2012-11-16 17:21:30

标签: r split dataframe cut posixct

我目前正在处理存储在数据框中的数据,时间在一列中。我必须把一整天分成几个时期。到目前为止,我一直在基于整个小时这样做

workingdata <- read.csv(filename)
workingdata$dateI <- as.POSIXlt(workingdata$dateI,format="%Y-%m-%d %H:%M:%S")
workingdata$hourI <- workingdata$dateI$hour
workingdata$shift <- cut(workingdata$hourI, breaks=c(0,6,13,23),
                         labels=c("morning","midday","evening"),
                         include.lowest=TRUE,right=TRUE)

此工作正常,并创建了三个级别的因素 - 从{0}到6:59的morning小时,从7:00到13:59的midday以及evening从14:00到23:59。

现在我想做类似的事情,但基于分钟/秒的削减,例如midday11:34:12开始。有没有办法用纯粹基于POSIXlt的剪切来做到这一点?什么是最好的方法?

编辑:我已经尝试将剪辑指定为POSIXlt对象,但它似乎总是包含日期,所以它不是我想要的......

> brk<-as.POSIXlt("11:34:12",format="%H:%M:%S")
> brk
[1] "2012-11-16 11:34:12"

1 个答案:

答案 0 :(得分:0)

您可以计算数据与数据来源之间的差异,并将其与截止点进行比较。

foo <- as.POSIXlt(runif(100,min=0,max=1000009),origin="2012-01-01")
bar <- rep(NA,length(foo))
morning <- 
    foo-as.POSIXlt(paste(1900+foo$year,"-",1+foo$mon,"-",foo$mday,sep=""))<
    11*60+34+12/60
bar[morning] <- "morning"

中午和晚上轮班并将bar转变为一个因素留给读者练习; - )