我的数据框的一列包含日期时间和一些字符串字符。喜欢:
"<13>1 2018-04-18T10:29:00.581243+10:00 KOI-QWE-HUJ vmon 2318 - - Some Description..."
我希望只从中提取日期时间部分,这样我就有这样的东西:
”
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"
你是对的,你应该首先提取日期时间的字符形式。这是一种适用于该格式的方法。它只是使用正则表达式并匹配 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 包(v0.2.0)于 2018 年 5 月 2 日创建。
anytime::anytime(sub(".*?\\s(.*?)\\+.*","\\1",a),tz = "UTC",T)
[1] "2018-04-18 10:29:00 UTC"
我有一个类似的字符串
x="提取日期:美国东部时间 2020 年 12 月 14 日晚上 10:01"
期望的输出是:
“2020-12-14 22:01 美国东部时间”
我尝试了从类似答案到类似问题的各种功能,但没有成功
谢谢你