【问题标题】:Converting dates in column of a data frame R转换数据框R列中的日期
【发布时间】:2019-11-16 15:52:33
【问题描述】:

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

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

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

【问题讨论】:

  • 这将创建一个动物园系列:library(zoo); B &lt;- read.zoo(xx, index = "B", format = "%m/%d/%Y") 这会将其转换为数据框fortify.zoo(B)

标签: r dataframe type-conversion


【解决方案1】:

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

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)

【讨论】:

  • 我的错误。我的示例仅显示一列,但实际上我正在转换的数据框中有一个列名向量,所以我的 sapply 函数实际上看起来像:xx[ , vector_of_names]
  • @Ernie 是的,我已经用lapply 更新了答案。它现在应该适用于多个列。 xx[vector_of_names] &lt;- lapply(xx[vector_of_names], as.Date, "%m/%d/%Y")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多