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

时间:2018-04-05 13:49:10

标签: r date gsub substr

我有一个带有日期的字符向量,以这种方式格式化(这只是一个例子):

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年代为我带来了多年,而不是像我想的那样在20世纪90年代。

我的想法是简单地使用x.19的每个元素中的句点的第三个实例替换为gsub,但我无法提出正则表达式来执行此操作,而且我和#39;在网上看了整个地方,真的无法弄清楚这一点。

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

我知道我可能会忽略一个更简单的解决方案,但请帮助我,我要拔掉头发试图解决这个问题。

2 个答案:

答案 0 :(得分:2)

你可以这样做:

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"

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

答案 1 :(得分:0)

尝试以下正则表达式。

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"