我不知道如何将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
我不知道如何将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
您可以只使用format
功能如下:
format(Date, '%Y%j')
这给:
[1] "2016161" "2016162" "2016163"
如果你想它格式化其他方式,请参阅?strptime
所有可能的选项。
或者,你可以使用从data.table
或lubridate
包year
和yday
功能,并将其与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"
这应该创建与指定的日期格式的新列工作:
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"
希望这会有所帮助。如果你只想要一个值而不用数据集,可能需要修改。
@mtoto如果只是寻找特定的价值,那么它有一个很好的,简单的答案。 –
这里有一个选项与lubridate
:
library(lubridate)
x <- Sys.Date()
#[1] "2016-06-08"
paste0(year(x),yday(x))
#[1] "2016160"
@卡佳处理程序 基本上所有其他格式(日期)的功能,并没有意识到% j存在。 如果有其他人存在,我想知道,正在参考本网站: [链接](http://www.statmethods.net/input/dates.html) – LanceS
[''格式' 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