从R中的字符串中提取DateTime

时间:2018-05-02 23:02:03

标签: r

我的数据框的一列有DateTime和一些字符串字符。像:

"<13>1 2018-04-18T10:29:00.581243+10:00 KOI-QWE-HUJ vmon 2318 - -  Some Description..."

我希望只从中提取DateTime部分,以便我有这样的东西:

&#34; 2018-04-18 10:29:00.581243"

我试过以下内容:

as.Date(strptime("<13>1 2018-04-18T10:29:00.581243+10:00 KOI-QWE-HUJ vmon 2318 - - Some Description...", "Date: %Y-%m-%d")) 但是,这会返回NA。

任何人都可以帮我纠正这个问题。提前谢谢。

修改 我尝试了以下分别获取日期和时间。这有效,但我需要将它们放在一个列中:

提取日期:

as.Date(str_extract(x, "[0-9]{4}-[0-9]{2}-[0-9]{2}"), format="%Y-%m-%d")
> [1] "2018-04-18"

提取时间:

str_extract(x, "[0-9]{2}:[0-9]{2}:[0-9]{2}")
> [1] "10:29:00"

2 个答案:

答案 0 :(得分:3)

你是对的,你应该首先提取日期时间的字符形式。这是一种适用于该格式的方法。它只是使用正则表达式并匹配4位数字,然后在适当的位置用-T:分隔两个数字组。然后,您可以使用lubridate::ymd_hms替代as.Date,因为它是不同日期格式的优秀瑞士军刀。

library(stringr)
library(lubridate)
string <- "<13>1 2018-04-18T10:29:00.581243+10:00 KOI-QWE-HUJ vmon 2318 - -  Some Description..."
string %>%
  str_extract("\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}") %>%
  ymd_hms()
#> [1] "2018-04-18 10:29:00 UTC"

reprex package(v0.2.0)创建于2018-05-02。

答案 1 :(得分:0)

anytime::anytime(sub(".*?\\s(.*?)\\+.*","\\1",a),tz = "UTC",T)
[1] "2018-04-18 10:29:00 UTC"