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

时间:2017-03-22 04:05:38

标签: r replace gsub

我有一个数据框,其日期和时间值为字符,从数据库中提取。目前,日期/时间如下所示:inStr > inEnd

我希望它像2017-03-17 11-56-20

一样

似乎没有像在R: How to replace . in a string?

中使用gsub替换所有破折号一样简单

我认为这与定位有关,就像告诉R只关注空间一样。想法?

3 个答案:

答案 0 :(得分:4)

由于您正在处理日期时间对象,因此可以使用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"  

答案 1 :(得分:3)

尝试匹配以下模式:

(\\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"

答案 2 :(得分:0)

您也可以使用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"