我在R中有一个数据框,我希望将其转换为日期.我知道我必须选择一周中的一年和一天,所以我在2014年和1日修复这些值.将此转换为日期似乎很简单:
as.Date(paste(2014,df$Week,1,sep=""),"%Y%U%u")
Run Code Online (Sandbox Code Playgroud)
但是这个代码仅在周大于9时有效.第1周 - 第9周返回NA.如果我将周更改为01,02,03 ......它仍会返回NA.
有人看到我错过了吗?
jer*_*ycg 23
as.Date 将1到9称为NA,因为它预期周数为两位数,并且无法正确解析它.
要修复它,添加一些 - 分解:
as.Date(paste(2014, df$Week, 1, sep="-"), "%Y-%U-%u")
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是使用lubridate包中的日期算法:
lubridate::ymd( "2014-01-01" ) + lubridate::weeks( df$Week - 1 )
Run Code Online (Sandbox Code Playgroud)
这-1是必要的,因为2014-01-01已经是第1周.换句话说,我们想要:
df$Week == 1映射到2014-01-01(这是ymd("2014-01-01") + weeks(1-1))df$Week == 2映射到2014-01-08(这是ymd("2014-01-01") + weeks(2-1))另一种选择是lubridate
lubridate::parse_date_time(paste(2014, df$Week, 1, sep="/"),'Y/W/w')
Run Code Online (Sandbox Code Playgroud)
W - 周数,w - 工作日数,0-6(周日至周六)
| 归档时间: |
|
| 查看次数: |
17058 次 |
| 最近记录: |