一些示例值:
12/01/2011 11:49
18-01-2011 9:50:45
我希望输出为:
11
09
日期时间列的类是我原始数据框中的因子。
答案 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