首页 > 解决方案 > 转换数据框R列中的日期

问题描述

我在将数据框中的一列导入日期(表示为不同日期格式的字符)转换为同一数据框中的日期对象时遇到问题。这是一个玩具示例:

xx <- data.frame(A = c(10, 15, 20), B = c("10/15/2010", "9/8/2015", "8/5/2013"))

如果我打印 xx,

   A          B
1 10 10/15/2010
2 15   9/8/2015
3 20   8/5/2013

我申请:

xx[, "B"] <- sapply(xx[, "B"], function(x) {as.Date(x, 
           format = "%m/%d/%Y", origin = "1970-01-01")})

我得到:

   A     B
1 10 14897
2 15 16686
3 20 15922

如果我查看 B 列的模式,它是数字,而不是日期。无论我尝试什么,我似乎都无法获得将 B 列转换为日期类型的结果。我总是可以补充:

xx[, "B"] <- as.Date(xx[, "B"]) 

但必须有一种方法可以在一个声明中做到这一点。

标签: rdataframetype-conversion

解决方案


如果你只有一列要转换,你可以做

xx$B <- as.Date(xx$B, "%m/%d/%Y")

如果您有多个列,请使用lapply而不是sapply

cols <- 2
xx[cols] <- lapply(xx[cols], as.Date, "%m/%d/%Y")

或者使用lubridate不需要指定格式参数的地方。

xx$B <- lubridate::mdy(xx$B)

推荐阅读