来自数据框中3个不同变量的日期

San*_*yal 2 r date concatenation

我有三列用于日,月和年,我想用它来制作一个日期列

> dt
    mon day year
 1:  NA  NA   NA
 2:  NA  NA   NA
 3:  NA  NA   NA
 4:  NA  NA   NA
 5:  NA  NA   NA
 6:  NA  NA   NA
 7:  NA  NA   NA
 8:  10  10 2017
 9:  NA  NA   NA
10:   4   4 2018
11:  NA  NA   NA
12:  NA  NA   NA
13:  NA  NA   NA
14:  NA  NA   NA
15:  NA  NA   NA
16:  NA  NA   NA
> 
Run Code Online (Sandbox Code Playgroud)

我使用下面的代码,它给出了奇怪的结果:

> as.Date(paste(dt$mon,dt$day,dt$year,sep="-"),format = "%m-%d-%y")
 [1] NA           NA           NA           NA           NA           NA           NA          
 [8] "2020-10-10" NA           "2020-04-04" NA           NA           NA           NA          
[15] NA
Run Code Online (Sandbox Code Playgroud)

我也试过以下:

library("lubridate")
with(dt, ymd(sprintf('%04d%02d%02d', year, mon, day)))
Run Code Online (Sandbox Code Playgroud)

我收到错误:sprintf出错("%04d%02d%02d",年份,星期一,天):格式'%04d'无效; 使用格式%f,%e,%g或%a表示数字对象

请建议这些代码是否有任何问题,或者是否有更好的解决方案可以解决我的问题?

谢谢!

Gio*_*ein 6

您的年份是4位数格式.

所以你应该使用%Y

as.Date(paste(dt$mon,dt$day,dt$year,sep="-"),format = "%m-%d-%Y")
Run Code Online (Sandbox Code Playgroud)