我有一个出生日期的矢量作为字符串格式" 10-Feb-85"。
当我在as.Date()
中使用R
函数时,它假设两位数年份是在2000之后(这些出生日期都不在2000年之后)。
例如:
as.Date(x = "10-Feb-52", format = "%d-%b-%y")
返回:2052-02-10
我不熟练使用正则表达式但是 我认为这是一个正则表达式插入" 19"在第二个" - "或者在最后两位数之前。
我发现了一个正则表达式向前计算三个字符并插入一个字母:
gsub(pattern = "^(.{3})(.*)$", replacement = "\\1d\\2", x = "abcefg")
但我不确定如何从最后算起两个。
感谢任何帮助。
答案 0 :(得分:1)
在第二个“ - ”之后或最后两个数字之前插入“19”。
在最后两位数之前:
gsub(pattern = "-(\\d{2})$", replacement = "-19\\1", x = "10-Feb-52")
请参阅R demo。在这里,-
首先匹配,然后是2位数((\\d{2})
) - 位于字符串末尾($
) - 匹配并捕获到组1中。
在第二个-
之后:
gsub(pattern = "^((?:[^-]*-){2})", replacement = "\\119", x = "10-Feb-52")
见another demo。这里,除了{2}
(-
)之外的0个字符的2个序列([^-]*
)从字符串的开头(^
)匹配并捕获到组1中。替换包含一个反向引用,用于在替换结果中恢复捕获的文本。