如何从日期时间列中提取小时数,该列在R中具有不同格式的值?

时间:2016-08-28 14:56:49

标签: r datetime

一些示例值:

12/01/2011 11:49    
18-01-2011 9:50:45

我希望输出为:

11   
09

日期时间列的类是我原始数据框中的因子。

2 个答案:

答案 0 :(得分:2)

您可以使用lubridate包轻松完成此操作。 正如@alistaire指出的那样,默认解决方案无法正确解析所有信息(分钟和秒),因为格式不一致(一个有秒,另一个没有)。幸运的是,truncated参数就在这里。我们可以将其设置为1,因为缺少一个元素。

  

如果truncated参数为非零ymd_hms,则还会检查截断格式。

library(lubridate)

hour(dmy_hms(c("12/01/2011 11:49", "18-01-2011 9:50:45"), truncated = 1))

[1] 11  9

甚至更好地使用magrittr包中的管道符号%>% - 喜欢此名称。

library(lubridate)    
library(magrittr)

c("12/01/2011 11:49", "18-01-2011 9:50:45") %>%
  dmy_hms(truncated = 1) %>%
  hour()

[1] 11  9

答案 1 :(得分:0)

一种选择是将sub与正则表达式一起使用:

dt <- c("12/01/2011 11:49", "18-01-2011 9:50:45")

sub(".*\\s(\\d{1,2}):.*", "\\1", as.character(dt))
# [1] "11" "9" 

来自str_extract的{​​{1}}:

stringr