我的数据框的一列有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"
答案 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"