as.date 在数据集中创建一些 NA
as.date creates some NAs in dataset
我有一个简单的小数据集:
> str(SFdischg)
'data.frame': 11932 obs. of 4 variables:
$ date: Factor w/ 11932 levels "1/01/1985","1/01/1986",..: 97 4409 8697 9677 10069 10461 10853 11245 11637 489 ...
$ ddmm: Factor w/ 366 levels "01-Apr","01-Aug",..: 1 13 25 37 49 61 73 85 97 109 ...
$ year: int 1984 1984 1984 1984 1984 1984 1984 1984 1984 1984 ...
$ cfs : int 1500 1430 1500 1850 1810 1830 1850 1880 1970 1980 ...
我想要一列日期以便绘制时间数据:
SFdischg$daymo <- as.Date(SFdischg$ddmm, format="%d-%b")
> summary(SFdischg)
date ddmm year cfs daymo
1/01/1985: 1 01-Apr : 33 Min. :1984 Min. : 172 Min. :2018-01-01
1/01/1986: 1 01-Aug : 33 1st Qu.:1992 1st Qu.: 705 1st Qu.:2018-04-04
1/01/1987: 1 01-Jul : 33 Median :2000 Median : 948 Median :2018-07-03
1/01/1988: 1 01-Jun : 33 Mean :2000 Mean :1374 Mean :2018-07-02
1/01/1989: 1 01-May : 33 3rd Qu.:2008 3rd Qu.:1340 3rd Qu.:2018-10-01
1/01/1990: 1 01-Nov : 33 Max. :2016 Max. :8100 Max. :2018-12-31
(Other) :11926 (Other):11734 NA's :8
然而,daymo
现在有 8 个 NA,我不明白为什么(这使得绘图变得困难!)。 ddmm
中没有缺失数据时,那一小撮 NA 是从哪里来的?我怎样才能避免它们?我错过了一些明显的东西吗?
我的猜测是 ddmm
列中的某些因素数据无法正确解析为日期。您可以使用以下方式揭示这些不良值:
SFdischg$ddmm[is.na(as.Date(SFdischg$ddmm, format="%d-%b"))]
请注意,由于 ddmm
列中没有年份部分,R 似乎自动将当前年份 2018 分配给日期。理想情况下,您应该使用包含年份的源信息来建立日期。
编辑: 根据您在下方的评论,违规行的日期为 19-Feb
。这意味着这些日期可能甚至不是来自 2018 年,2018 年不是闰年,2 月只有 28 天。这说明了在解析日期(包括年份)时使用全套信息的重要性。
我有一个简单的小数据集:
> str(SFdischg)
'data.frame': 11932 obs. of 4 variables:
$ date: Factor w/ 11932 levels "1/01/1985","1/01/1986",..: 97 4409 8697 9677 10069 10461 10853 11245 11637 489 ...
$ ddmm: Factor w/ 366 levels "01-Apr","01-Aug",..: 1 13 25 37 49 61 73 85 97 109 ...
$ year: int 1984 1984 1984 1984 1984 1984 1984 1984 1984 1984 ...
$ cfs : int 1500 1430 1500 1850 1810 1830 1850 1880 1970 1980 ...
我想要一列日期以便绘制时间数据:
SFdischg$daymo <- as.Date(SFdischg$ddmm, format="%d-%b")
> summary(SFdischg)
date ddmm year cfs daymo
1/01/1985: 1 01-Apr : 33 Min. :1984 Min. : 172 Min. :2018-01-01
1/01/1986: 1 01-Aug : 33 1st Qu.:1992 1st Qu.: 705 1st Qu.:2018-04-04
1/01/1987: 1 01-Jul : 33 Median :2000 Median : 948 Median :2018-07-03
1/01/1988: 1 01-Jun : 33 Mean :2000 Mean :1374 Mean :2018-07-02
1/01/1989: 1 01-May : 33 3rd Qu.:2008 3rd Qu.:1340 3rd Qu.:2018-10-01
1/01/1990: 1 01-Nov : 33 Max. :2016 Max. :8100 Max. :2018-12-31
(Other) :11926 (Other):11734 NA's :8
然而,daymo
现在有 8 个 NA,我不明白为什么(这使得绘图变得困难!)。 ddmm
中没有缺失数据时,那一小撮 NA 是从哪里来的?我怎样才能避免它们?我错过了一些明显的东西吗?
我的猜测是 ddmm
列中的某些因素数据无法正确解析为日期。您可以使用以下方式揭示这些不良值:
SFdischg$ddmm[is.na(as.Date(SFdischg$ddmm, format="%d-%b"))]
请注意,由于 ddmm
列中没有年份部分,R 似乎自动将当前年份 2018 分配给日期。理想情况下,您应该使用包含年份的源信息来建立日期。
编辑: 根据您在下方的评论,违规行的日期为 19-Feb
。这意味着这些日期可能甚至不是来自 2018 年,2018 年不是闰年,2 月只有 28 天。这说明了在解析日期(包括年份)时使用全套信息的重要性。