4

我需要将多种格式的日期字符串转换为有效日期。

例如

dates <- c("01-01-2017","02-01-2017","12-01-2016","20160901","20161001", "20161101")

> as.Date(dates, format=c("%m-%d-%Y","%Y%m%d"))
[1] "2017-01-01" NA           "2016-12-01" "2016-09-01" NA           "2016-11-01"

两个日期显示为 NA

4

2 回答 2

12

这几乎是我为以下内容编写的随时包:

R> dates <- c("01-01-2017","02-01-2017","12-01-2016","20160901","20161001", 
+             "20161101")
R> library(anytime)
R> anydate(dates)
[1] "2017-01-01" "2017-02-01" "2016-12-01" "2016-09-01" 
[5] "2016-10-01" "2016-11-01"
R> 

可靠地解析任何健全的输入,并且没有明确的格式来源或其他线路噪音。

话虽这么说,不从今年开始 ISO 风格会带来潜在的麻烦,所以02-03-2017可能是 2 月 3 日或 3 月 2 日。我正在遵循北美的惯例,我也认为它有些破旧——但它是如此普遍。帮自己一个忙,尝试将输入限制为 ISO 日期,至少 ISO 顺序为 YYYYMMDD。

于 2017-04-12T23:31:43.337 回答
0

我已经尝试过图书馆(任何时候),但是对于大数据没有用。然后,我发现这个序列很有用:

df$Date2 <- format(as.Date(df$Date, format="%m/%d/%Y"), "%d/%m/%y")

df$Date2 <- as.Date(df$Date2,"%d/%m/%y")

它在同一列中的“8/10/2005”和“08/13/05”对我有用。

于 2020-05-11T13:55:39.347 回答