2016-06-08 281 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"