创建新列"工作日%H:%M"来自时间戳

时间:2017-12-29 19:30:43

标签: r

我有一些列(timestamp,object_id,status和其他一些),我想用它来预测对象的状态。 我有一个假设,即"周时"对地位有重要影响。在"周期"我明白了:星期一23:17。 现在我想我需要用这种格式创建一个列来测试假设。

我已将时间戳转换为POSIXlt:

training_data$TimeStamp = as.POSIXlt(training_data$TimeStamp, "", "%Y-%m-%d %H:%M:%OS")

我还创建了一个只有工作日的专栏。

training_data$TimeStamp_weekday = weekdays(training_data$TimeStamp)

您能否帮我创建一个包含"周时"?

的列

我想我还需要只有4"时间段"每小时15分钟,使预测更容易。所以星期一23:17 - > 23:15

0-15 mins -> 0
15-30 mins -> 15
30-45 mins -> 30
45-60 mins -> 45

或类似的东西。

1 个答案:

答案 0 :(得分:2)

不需要将任何内容粘贴到lubridate :: weekday结果中。有一个trunc.POSIXt,但据我所知,它不会让你截断到小数区间。而是通过减去7.5分钟(= .0.125小时)截断到前15分钟标记,除以相同的数量,四舍五入然后乘以该数量。这应该具有"四舍五入的效果"到前一个间隔标记。然后使用format.POSIXt获取所需的格式。

> Sys.time()
[1] "2017-12-29 12:24:49 PST"
> 
format( as.POSIXct( to convert back to datetime
  round( as.numeric( Sys.time() -0.125 * 60*60 )/(0.125 * 60*60) ) * 0.125*60*60 , 
           origin="1970-01-01"), "%A %H:%M")
[1] "Friday 12:15"

什么是一直移动所以他们以间隔为中心"标记"或边界,然后在该比例上舍入到最接近的整数,然后再扩展回原始比例。