已阅读并成功应用以下主题
我有一列名为的值dates
,由于某种原因,我无法使用将该值转换为实际日期as.Dates
。它位于名为的数据框中general
。
我试图将其提取到另一个对象,但是我所得到的只是值列表
[[1]]
[1] NA "43897" NA "44004" "23/05/2020" "25/06/2020" "25/06/2020"
[8] "43837" "43989" "43868" "43989" "18/07/2020" NA "23/06/2020"
[15] "30/06/2020" "21/07/2020" "31/07/2020" "24/06/2020" "28/06/2020" "17/06/2020" "43989"
[22] "16/06/2020" NA "43896" "23/06/2020" "44018" "31/05/2020" "28/05/2020"
[29] "44081" "25/06/2020" NA NA "27/06/2020" "43926" "17/05/2020"
[36] NA "43956" "20/06/2020" "24/04/2020" "24/03/2020" "22/02/2020" NA
[43] NA NA NA NA NA NA NA
[50] NA NA NA "44030" "43837" "18/07/2020"
我试过了
as.Date(general$dates,"%Y-%m-%d")
哪个返回
[1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[32] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
甚至
lapply(general$dates,as.Date,origin = "1970-01-01")
Error in charToDate(x) :
character string is not in a standard unambiguous format
任何光将不胜感激。
由于有两种格式,我们可以grep
用来创建索引并单独进行。
# // create an index to separate the numeric only dates
i1 <- grepl('^\\d+$', dates)
dates1 <- as.Date(rep(NA, length(dates)))
# // specify the origin - seems like 1899 instead of 1970
dates1[i1] <- as.Date(as.numeric(dates[i1]), origin = '1899-12-31')
# // assign the other dates as well with the format
dates1[!i1] <- as.Date(dates[!i1], "%d/%m/%Y")
dates1
[1] NA "2020-03-08" NA "2020-06-23" "2020-05-23" "2020-06-25" "2020-06-25" "2020-01-08" "2020-06-08"
[10] "2020-02-08" "2020-06-08" "2020-07-18" NA "2020-06-23" "2020-06-30" "2020-07-21" "2020-07-31" "2020-06-24"
[19] "2020-06-28" "2020-06-17" "2020-06-08" "2020-06-16" NA "2020-03-07" "2020-06-23" "2020-07-07" "2020-05-31"
[28] "2020-05-28" "2020-09-08" "2020-06-25" NA NA "2020-06-27" "2020-04-06" "2020-05-17" NA
[37] "2020-05-06" "2020-06-20" "2020-04-24" "2020-03-24" "2020-02-22" NA NA NA NA
[46] NA NA NA NA NA NA NA "2020-07-19" "2020-01-08"
[55] "2020-07-18"
或者,如果将lubridate
,和一起使用,dplyr
则会更容易
library(dplyr)
library(lubridate)
coalesce(as_date(as.numeric(dates)), dmy(dates))
该origin
中as_date
应相应地更改
dates <- c(NA, "43897", NA, "44004", "23/05/2020", "25/06/2020", "25/06/2020",
"43837", "43989", "43868", "43989", "18/07/2020", NA, "23/06/2020",
"30/06/2020", "21/07/2020", "31/07/2020", "24/06/2020", "28/06/2020",
"17/06/2020", "43989", "16/06/2020", NA, "43896", "23/06/2020",
"44018", "31/05/2020", "28/05/2020", "44081", "25/06/2020", NA,
NA, "27/06/2020", "43926", "17/05/2020", NA, "43956", "20/06/2020",
"24/04/2020", "24/03/2020", "22/02/2020", NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, "44030", "43837", "18/07/2020")
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句