r - 当输入值可以是不同格式时,如何在 R 中将日期转换为格式 "yyyy-mm-dd"

标签 r date

我可以接收日期可以采用以下两种格式之一的文件:“mm/dd/yyyy”或“yyyy-mm-dd”。它们是首先要考虑的因素。无论我收到的日期格式如何,我都希望能够将它们转换为“yyyy-mm-dd”格式的“日期”数据类型。我尝试过使用

df_1$Date <- as.Date(as.character(df_1$Date), format = "%Y-%m-%d")

这适用于格式“yyyy-mm-dd”,但当输入值的格式为“mm/dd/yyyy”时给出 NA。同样,我尝试过的其他方法仅适用于这两种格式中的一种。 我需要它为两者工作。

下面我发布了用于创建数据集和复制问题的代码。

df_1 <- structure(list(Text.Identifier = c(4L, 5L, 7L, 1838L), Date = structure(c(2L, 
                                                                      2L, 1L, 3L), .Label = c("5/18/2016", "7/12/2015", "8/29/2016"
                                                                      ), class = "factor")), .Names = c("Text.Identifier", "Date"), class = "data.frame", row.names = c(NA, 
                                                                                                                                                                        -4L))

df_2 <- structure(list(Text.Identifier = 1:4, Date = structure(c(5L, 
                                                     5L, 5L, 1L), .Label = c("2015-07-12", "2016-05-01", "2016-05-05", 
                                                                             "2016-05-09", "2016-05-12", "2016-05-18", "2016-08-01", "2016-08-19", 
                                                                             "2016-08-29", "2016-09-20"), class = "factor")), .Names = c("Text.Identifier", 
                                                                                                                                         "Date"), row.names = c(NA, 4L), class = "data.frame")

df_1$Date <- as.Date(df_1$Date, format = "%Y-%m-%d")
df_2$Date <- as.Date(df_2$Date, format = "%Y-%m-%d")
View(df_1)
View(df_2)

最佳答案

我建议使用anydate()函数来自 anytime图书馆。它比 lubridate 更适合这种情况。的parse_date_time() ,因为它可以识别日期,而不需要任何用户输入有关条目顺序的信息,例如 ymddmy 。此外,如果数据存储为因子,也没有问题。

这是一个例子:

my_dates <- c("2015-07-12", "2016-05-01", "2016-05-05", "2016-05-09", 
 "2016-05-12", "2016-05-18", "2016-08-01", "2016-08-19", "2016-08-29",
 "2016-09-20", "5/18/2016", "7/12/2015", "8/29/2016")
my_dates <- as.factor(my_dates)
library(anytime)
anydate(my_dates)
# [1] "2015-07-12" "2016-05-01" "2016-05-05" "2016-05-09" "2016-05-12" "2016-05-18"
# [7] "2016-08-01" "2016-08-19" "2016-08-29" "2016-09-20" "2016-05-18" "2015-07-12"
#[13] "2016-08-29

可以验证输出的类别确实是 Date

class(anydate(my_dates))
#[1] "Date"

而另一个发布的解决方案会生成一个带有不必要时区信息的 POSIX 对象。

关于r - 当输入值可以是不同格式时,如何在 R 中将日期转换为格式 "yyyy-mm-dd",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40942750/

相关文章:

r - 在 R 中,将维度名称带入矩阵乘积中

javascript - 按日期过滤时Mongodb时区问题

sql - 如何比较 Postgresql 中日期时间字段中的日期?

r - 创建一个函数,并将参数传递给 dplyr::filter 解决 nse 的最佳方法是什么?

linux - 如何在 Linux Mint 17.1 上安装 R 3.1.2

string - 将整数字符串日期转换为实际日期

ios - NSDateComponents比较

sqlite - 如何格式化 SQLite 的日期和时间值?

r - 为什么这个 ggplot 上的颜色是错误的?

r - 测试空 bool 集的相等性