1

我有一个日期字符列,我想强制转换为 Date 类:

df$x <- as.Date(df$x)

# Error in charToDate(x)
#   character string is not in a standard unambiguous format

好的,我对这个错误很熟悉。我有类似的东西""90-Smarch-13"在我的专栏中。问题是head(df$x)看起来不错,正常 dates 2013-11-04,所以这不是我的列的全局问题,而是只有几行的问题。

我的问题是:

  1. 我可以找出有多少行不是这种标准的明确格式吗?
  2. 我可以找到索引(以检查或删除它们)吗?

我的想法:

  1. 使用try

for (i in 1:nrow(df)) try(as.Date$x[i]) # very slow, doesn't finish for 1M rows

  1. 尝试猜测问题使用的是什么nchar

head(df[nchar(df$x) != 10 & !is.na(df$x), ]$x)

有没有更系统的方法?

4

1 回答 1

1

我会parse_date_timelubridate包中使用,例如:

dates.toparse <- c("2013-11-04","" ,"90-Smarch-13","2012-05-04")
 ## parse dates , I give the correct format here %Y-%m-%d
(dates.parsed <- parse_date_time(dates.toparse,orders="Y-m-d"))
[1] "2013-11-04 UTC" NA               NA               "2012-05-04 UTC"
 ## to locate bad foarmatted elements
 dates.toparse[is.na(dates.parsed)]
[1] ""             "90-Smarch-13"
## or by indices
which(is.na(dates.parsed))
[1] 2 3
于 2013-11-03T23:26:01.027 回答