【发布时间】:2023-04-05 03:01:01
【问题描述】:
我有一个奇怪的日期列,因为月、日和年之间没有分隔符。这些日期之间的主要区别在于月/日中缺少 0。
| date | actual date |
|---|---|
| 90898 | 1998-09-08 |
| 91198 | 1998-11-08 |
| 100298 | 1998-09-08 |
| 10599 | 1999-10-05 |
| 31699 | 1999-03-16 |
我想使用基础 R 中的 as.Date 和 lubridate 包中的 parse_date_time 将其转换为常规日期格式并获得 NA。例如:
#some sample dates
structure(list(Dates = c("103001", "41400", "90501", "92200",
"102999", "102401", "12800", "91900", "111901", "83199", "31700",
"11400", "112200", "91099", "52199", "101101", "81999", "50401",
"92701", "80801", "81601", "111600", "90799", "110998", "42001",
"51801", "121498", "100899", "91499", "92598", "51900", "112499",
"63000", "110601", "31699", "101698", "112398", "20201", "22301",
"10599", "71101", "122898", "92899", "72799", "80400", "21100",
"72800", "12099", "81100", "101599", "90399", "50400", "120800",
"91898", "60299", "62701", "100298", "72501", "10300", "92600",
"31601", "21800", "30999", "30200", "92499", "60200", "10902",
"62300", "81800", "61301", "92998", "42199", "71400", "12902",
"31902", "101999", "62199", "43099", "111698", "72100", "22399",
"40402", "82301", "110398", "102798", "60900", "100300", "102098",
"22002", "102700", "83001", "81199")), row.names = c(NA, -92L
), class = c("tbl_df", "tbl", "data.frame"))
我尝试了以下调用:
as.Date(dates$Dates,format="%m%d%y")
as.Date(dates$Dates,format="%m%j%y")
as.Date(dates$Dates,format="%n%j%y")
lubridate::parse_date_time(dates$Dates,orders="mdy")
并且它们都在数据集中返回许多 NA。知道这里出了什么问题吗?
【问题讨论】:
-
你能显示预期的输出吗?即您拥有
"41400"的日期是什么时候 -
应该是 2000-04-14。应该是
'%n%d%y'格式。这是我看到的:> parse_date_time('41400',orders="mdy") [1] NA Warning message: All formats failed to parse. No formats found. > as.Date('41400',format="%m%d%y") [1] NA > as.Date('41400',format="%m%j%y") [1] NA > as.Date('41400',format="%n%j%y") [1] NA > -
当年份为 2 位数字时,这有点问题,而“00”进一步加剧了这种情况。请检查下面的解决方案