Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在字符串日期中插入前缀19_R_Regex_Date - Fatal编程技术网

R 在字符串日期中插入前缀19

R 在字符串日期中插入前缀19,r,regex,date,R,Regex,Date,我有一个以字符串形式表示的出生日期向量,格式为“1985年2月10日” 当我在R中使用as.Date()函数时,它假定两位数的年份在2000年之后(这些出生日期都不在2000年之后) 例如: 截止日期(x=“52年2月10日”,格式=“%d-%b-%y”) 返回:2052-02-10 我不精通正则表达式,但是 我认为这是正则表达式在第二个“-”之后或最后两个数字之前插入“19”的机会 我发现了一个向前计数三个字符并插入一个字母的正则表达式: gsub(pattern=“^(.{3})(.*)$”

我有一个以字符串形式表示的出生日期向量,格式为“1985年2月10日”

当我在
R
中使用
as.Date()
函数时,它假定两位数的年份在2000年之后(这些出生日期都不在2000年之后)

例如:
截止日期(x=“52年2月10日”,格式=“%d-%b-%y”)

返回:
2052-02-10

我不精通正则表达式,但是 我认为这是正则表达式在第二个“-”之后或最后两个数字之前插入“19”的机会

我发现了一个向前计数三个字符并插入一个字母的正则表达式:

gsub(pattern=“^(.{3})(.*)$”,replacement=“\\1d\\2”,x=“abcefg”)

但我不知道如何从最后数到两

感谢您的帮助

在第二个“-”后或最后两位数前插入“19”

在最后两位数之前:

gsub(pattern = "-(\\d{2})$", replacement = "-19\\1", x = "10-Feb-52")
看。在这里,首先匹配
-
,然后匹配字符串(
$
)末尾的2个数字(
(\\d{2})
),并将其捕获到组1中

在第二个
-
之后:

gsub(pattern = "^((?:[^-]*-){2})", replacement = "\\119", x = "10-Feb-52")

看。这里,0+字符的2个序列(
{2}
),而不是
-
[^-]*
)从字符串的开头(
^
)匹配并捕获到组1中。替换包含一个反向引用,用于恢复替换结果中捕获的文本。

来自
?strtime
:在输入时,值00到68的前缀为20,值69到99的前缀为19–这是2004和2008 POSIX标准规定的行为,但他们也表示“预计在未来的版本中,从两位数年份推断出的默认世纪将发生变化”。@WiktorStribiżew,我对这些数据已经足够熟悉了。可能有一些是1800年代的,但我对此表示怀疑。你可以尝试一下lubridate(代码)
lubridate
lubridate::dmy(c(“85年2月10日”,“15年2月10日”)[1]“1985-02-10”“2015-02-10”
@UweBlock:这样你就可以添加
19
20
,并且它们都是在开头添加的,虽然任务是仅在第二个连字符后的最后两位数字处添加
19
。此外,建议的重复源插入
20
19
,这不是此处所期望的。那么“2015年2月10日”呢?这不应该成为2015-02-10吗?@UweBlock:问OP,根据当前的问题,不应该。