在R中将列值转换为日期

在R中将列值转换为日期,r,excel,dataframe,date,dplyr,R,Excel,Dataframe,Date,Dplyr,以下主题已阅读并应用,但未成功 我有一列名为dates的值,由于某种原因,我无法使用as.dates转换为实际日期。它位于名为general的数据帧中 我试图将其提取到另一个对象,但得到的只是一个值列表 [[1]] [1] NA "43897" NA "44004" "23/05/2020" "25/06/2020" "25/06/2020&

以下主题已阅读并应用,但未成功

我有一列名为
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(一般$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"
应相应地更改
as_date
中的
原点

数据
dates as.Date(general$dates,“%d/%m/%Y”)如何?@LocoGris我尝试过,但它最终将一些观察结果转换为NAs.Hi。它起了部分作用。有些值的表现很奇怪,如下所示:
[1]NA“2090-03-09”NA“2090-06-24”“2020-05-23”“2020-06-25”“2020-06-25”[8]“2090-01-08”“2090-06-09”“2090-02-08”“2090-06-09”“2020-07-18”NA
它确实更改为日期格式,但奇怪的是改为2090而不是2020年。知道怎么解决吗?嗨。通过使用
grep
方法,它工作得非常好。通过使用lubridate,它没有这样做,一些值表现得很奇怪,将年份从2020年改为2090年。知道为什么会发生这种情况吗?@dairelix是的,正如我在帖子中提到的,
origin
默认为
'1970-01-01'
,您可以使用自定义的
as.Date
指定
origin
library(dplyr)
library(lubridate)
coalesce(as_date(as.numeric(dates)), dmy(dates))
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")