2016-06-08 444 views
5

我不知道如何將Sys.Date()轉換爲格式爲YYYYDDD的數字。其中DDD是一年中的一天,即1月1日將是2016001 12月31日將是2016365如何將日期轉換爲YYYYDDD?

Date <- Sys.Date() ## The Variable Date is created as 2016-01-01 
SomeFunction(Date) ## Returns 2016001 
+0

@卡佳處理程序 基本上所有其他格式(日期)的功能,並沒有意識到% j存在。 如果有其他人存在,我想知道,正在參考本網站: [鏈接](http://www.statmethods.net/input/dates.html) – LanceS

+1

[''格式' as.Date'](https://stat.ethz.ch/R-manual/R-devel/library/base/html/as.Date.html)鏈接到['strptime']的相關文檔(https: //stat.ethz.ch/R-manual/R-devel/library/base/html/strptime.html),其中列出了所有日期 - 時間轉換規範。 – RHertel

回答

6

您可以只使用format功能如下:

format(Date, '%Y%j') 

這給:

[1] "2016161" "2016162" "2016163" 

如果你想它格式化其他方式,請參閱?strptime所有可能的選項。

或者,你可以使用從data.tablelubridateyearyday功能,並將其與paste0貼在一起:

library(data.table) # or: library(lubridate) 
paste0(year(Date), yday(Date)) 

,這將給你相同的結果。


這兩個選項返回的值都是類字符。將上述解決方案包裝在as.numeric()中以獲得實數。


使用的數據

> Date <- Sys.Date() + 1:3 
> Date 
[1] "2016-06-09" "2016-06-10" "2016-06-11" 
> class(Date) 
[1] "Date" 
+0

太簡單了。萬分感謝。 – LanceS

+0

也許是幫助我學習的更深層次的問題:你怎麼知道%j存在?我沒有在其他地方遇到過。 – LanceS

+1

@LanceScadden請參閱'?strptime' – Jaap

1

這應該創建與指定的日期格式的新列工作:

Date <- Sys.Date  
df$Month_Yr <- format(as.Date(df$Date), "%Y%d") 

但是,特別是使用更大的數據集時,更容易執行以下操作:

library(data.table) 
setDT(df)[,NewDate := format(as.Date(Date), "%Y%d" 

希望這會有所幫助。如果你只想要一個值而不用數據集,可能需要修改。

+1

@mtoto如果只是尋找特定的價值,那麼它有一個很好的,簡單的答案。 –

3

這裏有一個選項與lubridate

library(lubridate) 
x <- Sys.Date() 
#[1] "2016-06-08" 
paste0(year(x),yday(x)) 
#[1] "2016160"