在保留句点的同时替换字符串中句点的第三个实例

Replace the third instance of a period in a character string while keeping the period

我有一个带日期的字符向量,格式如下(这只是一个例子):

x <- c("03.04.30", "02.06.32", "01.11.33", "10.10.31")

等等。我正在使用 as.Date 函数:

x <- as.Date(x, format = "%d.%m.%Y")

它正在工作,但它在 2000 年代对我来说是回归岁月,而不是我想要的 1990 年代。

我的想法是使用 gsub 简单地将 x 的每个元素中的第三个句点替换为 .19,但我无法想出一个正则表达式来这样做我在网上到处都看了,真的想不通。

我也尝试过使用 substr 函数将 x 的每个元素的第 6 个字符替换为 .19 但它只是替换了整个字符串。能够有效地完成其中任何一项都会对我有所帮助!

我知道我可能忽略了一个更简单的解决方案,但请帮助我,我正在努力解决这个问题。

你可以这样做:

x <- c("03.04.30", "02.06.32", "01.11.33", "10.10.31")
x <- gsub("(\d{2})$", "19\1", x)
as.Date(x, format = "%d.%m.%Y")

获得:

[1] "1930-04-03" "1932-06-02" "1933-11-01" "1931-10-10"

这假定数据的格式一致,否则您可能需要重新考虑正则表达式。

试试下面的正则表达式。

x2 <- sub("\.(\d{2})$", ".19\1", x)
x2
#[1] "03.04.1930" "02.06.1932" "01.11.1933" "10.10.1931"

as.Date(x2, format = "%d.%m.%Y")
#[1] "1930-04-03" "1932-06-02" "1933-11-01" "1931-10-10"