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

R 在字符串的一部分用冒号替换破折号,r,replace,gsub,R,Replace,Gsub,我有一个数据框,其中日期和时间值是从数据库中提取的字符。当前日期/时间如下:2017-03-17 11-56-20 我希望它像这样运行2017-03-17 11:56:20 它似乎不像在中使用gsub替换所有破折号那样简单 我认为这与定位有关,比如告诉R只照看空间。想法?尝试匹配以下模式: (\\d\\d)-(\\d\\d)-(\\d\\d)$ 然后将其替换为: \\1:\\2:\\3 这将专门匹配您的时间戳,因为模式末尾的终端锚$。然后,我们使用冒号和三个捕获组按照您想要的方式重建时间戳

我有一个数据框,其中日期和时间值是从数据库中提取的字符。当前日期/时间如下:
2017-03-17 11-56-20

我希望它像这样运行
2017-03-17 11:56:20

它似乎不像在中使用gsub替换所有破折号那样简单


我认为这与定位有关,比如告诉R只照看空间。想法?

尝试匹配以下模式:

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

尝试匹配以下模式:

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

由于您处理的是日期时间对象,因此可以使用
strtime

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"  

x由于您处理的是日期时间对象,因此可以使用
strtime

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"  
x您可以使用
library(随时)
为您处理格式设置(这也强制使用
POSIX

您也可以使用
library(随时)
来处理格式设置(这也会强制使用
POSIX


as.character(strtime(x,“%Y-%m-%d%H-%m-%S”,tz=”“)
?@A5C1D2H2I1M1N2O1R2T1对我来说似乎是一个答案:-)
gsub((\\d\\d\\d)-(\\d\\d)-(\\d\\d)$”,“\\1:\\2:\\3”,x)是另一个选项,它不会使用R的日期/时间API,可能不是一个如此简单的好解决方案!工作完美而简单。你太棒了。@TimBiegeleisen如果目标只是得到一个字符串thoug,我很确定
gsub
会比
strtime
as.character(strtime(x,“%Y-%m-%d%H-%m-%S”,tz=”“)
?@a5c1d2h2i1n2o1r2t1看起来像是我的答案:-
gsub(“(\\d\\d\\d\\d)-)-(\\d\\d)$”,“\\1:\\2:\\3”,x)
是另一个选项,它不会使用R的日期/时间API,这可能不是一个很好的解决方案!工作完美而简单。你太棒了。@TimBiegeleisen如果目标只是得到一个字符串thoug,我很确定
gsub
会比
strtime
更快。而且as.POSIXct也能工作——从长远来看甚至更好。我打算先做一些简单的小步骤。而且as.POSIXct也可以工作——从长远来看甚至更好。我想先做简单的婴儿步。