【问题标题】:Create a factor based on POSIXlt time?根据 POSIXlt 时间创建一个因子?
【发布时间】:2012-11-16 17:21:30
【问题描述】:

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

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)

这很好用,并创建了三个级别的因子 - morning 从 0:00 到 6:59,midday 从 7:00 到 13:59,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"

【问题讨论】:

  • 您是否尝试以您需要的格式指示中断?如果是这样,那里发生了什么。
  • 据我了解,POSIXlt 要求我指定完整日期,包括日期。我已将此添加到主要问题中。
  • 如果从 brk 拼接出时间会发生什么? justTime &lt;- strsplit(as.character(brk), " ")[[c(1,2)]]
  • 如果这不起作用,也许发布一些示例数据?

标签: r split dataframe cut posixct


【解决方案1】:

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

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 变成一个因素留给读者练习 ;-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-17
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    • 2022-07-02
    • 2021-03-18
    相关资源
    最近更新 更多