r - 如何将具有混合日期格式的变量转换为一种格式?

我的数据框示例:

                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")

最佳答案

您可以尝试 lubridate 包中的 parse_date_time,它使用 orders “允许用户指定几种格式顺序来处理异构日期时间字符表示” 参数。比如……

library(lubridate)
parse_date_time(x = df$date,
                orders = c("d m y", "d B Y", "m/d/y"),
                locale = "eng")

...应该能够处理您的大多数格式。请注意 b/B formats are locale sensitive .

orders 中可以使用的其他日期时间格式列在 ?strptimeDetails 部分中。

https://stackoverflow.com/questions/25463523/

相关文章:

r - 在 knitr 上设置全局千位分隔符

php - Aptana 自动格式化

sql-server - 漂亮的 T-SQL 打印机?

ruby - 在rails应用程序中生成pdf时如何用Prawn定义行高?

google-apps-script - 单元格处于事件状态时突出显示整行

java - 如何在 Java 中设置尊重用户操作系统设置的日期和时间格式

string - 为什么不使用 %v 打印 int 和 string

c# - Visual Studio 改变了 Ctrl-K-D 的工作方式

jquery - 如何自定义 Eclipse 的关于 jQuery 代码的格式化程序

ruby - 如何格式化 BigDecimal 以仅显示所需数量的十进制数字?