R 将YYYY-YY转换为年(日期)

R 将YYYY-YY转换为年(日期),r,as.date,R,As.date,我有一个数据框,年列为财政年度 Year 2001-02 2002-03 2003-04 我如何将其转换为保留整个事件或仅保留第二年(即200220032004)的as.Date。使用%Y转换时,我不可避免地会得到2001-08-08、2002-08-08、2003-08-08等 谢谢库(lubridate) 年份1)ISOdate澄清问题,因为它指的是年终和日期,我们假设输入是问题中显示的财政年度(加上我们添加了“1999-00”边缘案例)以及年终的月份和日期。我们假设所需的输出

我有一个数据框,年列为财政年度

Year  
2001-02  
2002-03  
2003-04
我如何将其转换为保留整个事件或仅保留第二年(即200220032004)的as.Date。使用
%Y
转换时,我不可避免地会得到2001-08-08、2002-08-08、2003-08-08等

谢谢

库(lubridate)
年份1)ISOdate澄清问题,因为它指的是年终和日期,我们假设输入是问题中显示的财政年度(加上我们添加了“1999-00”边缘案例)以及年终的月份和日期。我们假设所需的输出是作为日期对象的年终。(如果这不是预期的问题,并且您只希望财政年度作为一个数字,那么请参见末尾的注释。)

回到假设的问题,让我们假设,例如,3月31日是年底。下面我们使用
子字符串
提取
年份
的前4个字符,将其转换为数字并添加1。然后我们将其与月份和日期一起传递到
ISODate
,最后将其转换为日期。没有使用正则表达式或包

# test inputs

month <- 3
day <- 31
Year <- c("1999-00", "2001-02", "2002-03", "2003-04")

# yearends

as.Date(ISOdate( as.numeric(substring(Year, 1, 4))+1, month, day))
## [1] "2000-03-31" "2002-03-31" "2003-03-31" "2004-03-31"
as.Date(sprintf("%d-%d-%d", as.numeric(sub("-..", "", Year))+1, month, day))
## [1] "2000-03-31" "2002-03-31" "2003-03-31" "2004-03-31"
注意:如果您只希望财政年度结束作为一个数字,那么它将是这样的:

as.numeric(substring(Year, 1, 4)) + 1

为什么不在第一年使用
sub('-.''','',Year)
,或者在第二年使用
paste0('20',sub('.'-','',2001-02')
,在第二年使用
sub(“^(…)-(…),“\\1\\2”,“2001-02”)
。只是不要在日期上使用正则表达式。他们永远不会抓住“4月31日”的事情。只有日期分析器可以,我们有很多。使用它们,并推荐它们的使用。这给了我从200120022003年开始的几年时间。我要求第二年是主要的。你为什么用
作为.Date
?这没有意义,因为你没有几个月或几天的时间。两者都是构建日期对象所必需的。最后一列的str是数字。我正在寻找日期格式YYYY或YYYY-YY。日期将始终包括月份和日期。如果只需要年份,则需要将其提取为数字或字符向量。这就是
year
lubridate
所做的,或者您可以使用
格式
获得它。顺便说一句,您将无法仅获取年份并将其保持为日期类型。
as.numeric(substring(Year, 1, 4)) + 1