将具有混合日期格式的变量转换为一种格式

将具有混合日期格式的变量转换为一种格式

我的数据帧的示例:


                date

1   25 February 1987

2     20 August 1974

3     9 October 1984

4     18 August 1992

5  19 September 1995

6          16-Oct-63

7          30-Sep-65

8        22 Jan 2008

9         13-11-1961

10    18 August 1987

11         15-Sep-70

12    5 October 1994

13   5 December 1984

14          03/23/87

15    30 August 1988

16        26-10-1993

17    22 August 1989

18         13-Sep-97

我有一个大型数据框,其日期变量有多种日期格式。变量中的大多数格式如上所示 - 还有一些非常罕见的其他格式。有多种格式的原因是数据是从各种网站中提取的,每个网站都使用不同的格式。


我尝试过使用简单的转换,例如


strftime(mydf$date,"%d/%m/%Y")

但如果有多种格式,这些转换将无效。我不想求助于多个gsub类型的编辑。我想知道我是否错过了一个更简单的解决方案?


代码例如:


    structure(list(date = structure(c(12L, 8L, 18L, 6L, 7L, 4L, 14L, 

10L, 1L, 5L, 3L, 17L, 16L, 11L, 15L, 13L, 9L, 2L), .Label = c("13-11-1961", 

"13-Sep-97", "15-Sep-70", "16-Oct-63", "18 August 1987", "18 August 1992", 

"19 September 1995", "20 August 1974", "22 August 1989", "22 Jan 2008", 

"03/23/87", "25 February 1987", "26-10-1993", "30-Sep-65", "30 August 1988", 

"5 December 1984", "5 October 1994", "9 October 1984"), class = "factor")), .Names = "date", row.names = c(NA, 

-18L), class = "data.frame")


凤凰求蛊
浏览 627回答 3
3回答

炎炎设计

您可以尝试parse_date_time在包装lubridate其“允许用户指定几个格式,订单处理异构日期时间的字符表示”使用orders的说法。就像是...library(lubridate)parse_date_time(x = df$date,                 orders = c("d m y", "d B Y", "m/d/y"),                 locale = "eng")...应该能够处理大多数格式。请注意b/ B格式是locale敏感的。可以使用的其他日期时间格式orders列在“ 详细信息”部分中?strptime。
打开App,查看更多内容
随时随地看视频慕课网APP