在字符串的一部分中用冒号替换破折号
Replace dashes with colon in part of string
我有一个数据框,其中日期和时间值作为字符,是从数据库中提取的。当前 date/time 看起来像这样:2017-03-17 11-56-20
我希望它看起来像这样2017-03-17 11:56:20
它似乎并不像 R: How to replace . in a string?
中那样使用 gsub 替换所有破折号那么简单
我认为这与定位有关,比如告诉 R 只照顾 space。想法?
尝试匹配以下模式:
(\d\d)-(\d\d)-(\d\d)$
然后将其替换为:
\1:\2:\3
这将完全匹配您的时间戳,因为模式末尾有终端锚点 $
。然后,我们使用冒号和三个捕获组按照您想要的方式重建时间戳。
gsub("(\d\d)-(\d\d)-(\d\d)$", "\1:\2:\3", x)
[1] "2017-03-17 11:56:20"
由于您处理的是日期时间对象,因此可以使用 strptime
:
x <- "2017-03-17 11-56-20"
as.character(strptime(x, "%Y-%m-%d %H-%M-%S", tz = ""))
# [1] "2017-03-17 11:56:20"
您也可以使用 library(anytime)
为您处理格式(这也会强制转换为 POSIX
)
library(anytime)
anytime(x)
# [1] "2017-03-17 11:56:20 AEDT"
as.character(anytime(x))
# [1] "2017-03-17 11:56:20"
我有一个数据框,其中日期和时间值作为字符,是从数据库中提取的。当前 date/time 看起来像这样:2017-03-17 11-56-20
我希望它看起来像这样2017-03-17 11:56:20
它似乎并不像 R: How to replace . in a string?
中那样使用 gsub 替换所有破折号那么简单我认为这与定位有关,比如告诉 R 只照顾 space。想法?
尝试匹配以下模式:
(\d\d)-(\d\d)-(\d\d)$
然后将其替换为:
\1:\2:\3
这将完全匹配您的时间戳,因为模式末尾有终端锚点 $
。然后,我们使用冒号和三个捕获组按照您想要的方式重建时间戳。
gsub("(\d\d)-(\d\d)-(\d\d)$", "\1:\2:\3", x)
[1] "2017-03-17 11:56:20"
由于您处理的是日期时间对象,因此可以使用 strptime
:
x <- "2017-03-17 11-56-20"
as.character(strptime(x, "%Y-%m-%d %H-%M-%S", tz = ""))
# [1] "2017-03-17 11:56:20"
您也可以使用 library(anytime)
为您处理格式(这也会强制转换为 POSIX
)
library(anytime)
anytime(x)
# [1] "2017-03-17 11:56:20 AEDT"
as.character(anytime(x))
# [1] "2017-03-17 11:56:20"