我有一个数据框,其中年份列为财政年度
Year
2001-02
2002-03
2003-04
我如何将其转换为as.Date保持整个事件或仅仅是第二年,即2002,2003,2004。在转换%Y
时,我不可避免地得到2001-08-08,2002-08-08,2003-08-08等。
由于
答案 0 :(得分:1)
library(lubridate)
Year <- c('2001-02', '2002-03', '2003-04')
year(as.Date(gsub('[0-9]{2}-', '', Year), format = '%Y'))
答案 1 :(得分:0)
1)ISOdate 澄清问题,因为它引用了年末和日期我们假设输入是问题中显示的会计年度(另外我们已经添加了&#34; 1999-00& #34;边缘情况)以及年终的月份和日期。我们假设所需的输出是作为Date对象的年终。 (如果这不是预期的问题,你只想将财政年度作为一个数字,那么最后请看注释。)
回到假定的问题,让我们假设,例如,3月31日是年终。下面我们使用Year
提取substring
的前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"
2)字符串操作使用相同输入的替代解决方案如下。它是类似的,除了我们使用sub
一个与减号相匹配的正则表达式,后面两个字符为它们为零长度字符串,转换为数字并添加1.然后它以{可接受的格式格式化一个字符串{1}}使用as.Date
并最终应用sprintf
。没有包使用。
as.Date
注意:如果您只想将财政年度作为一个数字,那么就是这样:
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"