在字符串的一部分中用冒号替换破折号

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"