我有一年列的數據幀財政年度轉換YYYY-YY到年(日期)
Year
2001-02
2002-03
2003-04
我怎樣才能將它轉換爲as.Date既保持整個事情或只是第二年即2002,2003,2004。在與%Y
轉換,我不可避免地得到2001-08-08,2002-08-08,2003-08-08等
感謝
我有一年列的數據幀財政年度轉換YYYY-YY到年(日期)
Year
2001-02
2002-03
2003-04
我怎樣才能將它轉換爲as.Date既保持整個事情或只是第二年即2002,2003,2004。在與%Y
轉換,我不可避免地得到2001-08-08,2002-08-08,2003-08-08等
感謝
library(lubridate)
Year <- c('2001-02', '2002-03', '2003-04')
year(as.Date(gsub('[0-9]{2}-', '', Year), format = '%Y'))
最後一列的str是數字。我正在尋找日期格式YYYY或YYYY-YY。 –
日期將始終包括月份和日期。如果你只想要一年,你需要將它作爲數字或字符向量提取。這就是'lubridate'的'year',或者你可以用'format'來獲得它。 AFAIK,你將無法獲得僅僅一年的時間並保持日期類型。 –
1)ISOdate明確的問題,因爲它指年終和日期,我們假設輸入是問題中顯示的財政年度(加上我們添加了「1999-00」邊緣案例)以及年終的月份和日期。我們假設所需的輸出是年末對象。 (如果這不是預期的問題,並且您只想將財政年度作爲數字,那麼請參閱最後的註釋。)
回到假設問題,讓我們假設例如3月31日是年終。下面我們使用substring
提取Year
的前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之外,其他都類似。然後它使用sprintf
格式化字符串,格式爲as.Date
可接受的格式;最後適用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"
注:如果你只是想財年年底爲數字那麼這將是眼前這個:
as.numeric(substring(Year, 1, 4)) + 1
你爲什麼不只是使用'子(「 - *。」 ,'',Year]'爲第一年或'paste0('20',sub('。* - ','','2001-02'))'爲第二個 – Sotos
'sub(「^(.. )..-(..)$「,」\\ 1 \\ 2「,」2001-02「)爲第二年。 – lmo
只是不要使用日期的正則表達式。他們將永遠不會抓住「4月31日」的事情。只有日期解析器可以,我們有很多。使用它們,並推薦使用它們。 –