【发布时间】:2017-02-10 17:01:25
【问题描述】:
我有一个出生日期向量,格式为“10-Feb-85”的字符串。
当我在 R 中使用 as.Date() 函数时,它假定两位数年份是 2000 年之后(这些出生日期都不是 2000 年之后)。
示例:
as.Date(x = "10-Feb-52", format = "%d-%b-%y")
返回:2052-02-10
我不精通正则表达式,但是 我认为这是正则表达式在第二个“-”之后或最后两位数字之前插入“19”的机会。
我找到了一个正则表达式,可以向前计数三个字符并插入一个字母:
gsub(pattern = "^(.{3})(.*)$", replacement = "\\1d\\2", x = "abcefg")
但我不确定如何从最后数两个。
感谢任何帮助。
【问题讨论】:
-
来自
?strptime:在输入时,值 00 到 68 以 20 为前缀,而 69 到 99 以 19 为前缀——这是 2004 年和 2008 年 POSIX 标准指定的行为,但它们也说 '预计在未来的版本中,从 2 位数年份推断的默认世纪将发生变化。 -
@WiktorStribiżew ,我对数据足够熟悉。 1800 年代可能有一些,但我对此表示怀疑。
-
你可以试试
lubridate:lubridate::dmy(c("10-Feb-85", "10-Feb-15")) [1] "1985-02-10" "2015-02-10" -
@UweBlock:那你加
19或者20,在开头加,而任务是在后面的最后2位只加19第二个连字符。 -
另外,建议作为欺骗源的
cronsolution 插入20或19,这不是这里所期望的。