Gsub 日期的第一个数字

Gsub the first to digits of a date

我想在我的数据集中将年份“1984”重塑为“84”。我只想删除第一个数字 ('19') 和 ('20') 所以只保留最后两个数字。

我试过以下方法:

gsub('19+', '', year)
gsub('20+', '', year)

这些代码也完全删除了 1919 年或 2020 年,但这不是我们的想法。

使用 gsub 时我可以尝试什么代码?

使用 19+ 将匹配 1 后跟 1 次或多次 9。使用 20+ 将匹配 2 后跟 1 次或多次 0。当 gsub 替换字符串的所有匹配项时,您将同时匹配 1919 和 2020,因为它还会匹配例如 19999919 或 200.


您可以使用模式来匹配 19 或 20 并捕获捕获组中的最后 2 位数字。

在替换中使用使用 \1 的第一个捕获组,并在模式周围使用单词边界 \b 以防止数字成为较大字符串的一部分。

gsub('\b(?:19|20)(\d\d)\b', '\1', "1984")

输出

[1] "84"

R demo

更广泛的匹配可以匹配开头的 2 个数字,而不是 19 或 20。

gsub('\b\d{2}(\d{2})\b', '\1', "1984")

使用 ^ 作为字符串的开头。

gsub("^19|^20", "", year)
# [1] "19" "28" "37" "46" "55" "64" "73" "82" "91" "00" "09" "18"

或者使用 substring

substring(year, 3)
# [1] "19" "28" "37" "46" "55" "64" "73" "82" "91" "00" "09" "18"

数据:

year <- seq(1919, 2021, 9)