As.Date returns 应用于列时出错

As.Date returns error when applied to column

我有一个包含大约 20000 个观测值的数据集。我需要将其中一列转换为不同的日期格式。

head(df$created_at)
[1] Tue Mar 31 13:42:58 +0000 2020 Sat Mar 14 05:15:56 +0000 2020
[3] Sun Apr 05 14:02:10 +0000 2020 Tue Mar 24 09:06:12 +0000 2020
[5] Tue Apr 28 01:14:28 +0000 2020 Thu Oct 24 18:47:10 +0000 2019

我可以将 as.date 应用于单个行:

as.Date(df$created_at[1], format = '%a %b %d %H:%M:%S %z %Y')

[1] "2020-03-31

但是当我尝试在整个列上使用 as.Date 时,我得到:

df$dates = as.Date(df$created_at, format = '%a %b %d %H:%M:%S %z %Y')

Error in strptime(x, format, tz = "GMT") : input string is too long

我做错了什么?我还缺少其他命令吗?

(评论太长了。)

它适用于您向我们展示的数据。您的专栏后面一定有问题。您可以通过对数据的子集尝试命令来找到问题,例如tmp <- as.Date(df[1:(round(nrow(df)/2)), "created_at", ...) - 然后 bisect 找到问题,例如如果问题没有出现在数据集的前半部分,那么尝试行 1:(round(0.75*nrow(df))) 等等...

您也可以尝试绘制 nchar(df$created_at) 以查看是否弹出任何内容。


df <- data.frame(created_at=c(
   "Tue Mar 31 13:42:58 +0000 2020 Sat Mar 14 05:15:56 +0000 2020",
   "Sun Apr 05 14:02:10 +0000 2020 Tue Mar 24 09:06:12 +0000 2020",
   "Tue Apr 28 01:14:28 +0000 2020 Thu Oct 24 18:47:10 +0000 2019"))

df$dates = as.Date(df$created_at, format = '%a %b %d %H:%M:%S %z %Y')

Ben 提到的数据不存在问题,这是一个使用 lubridate 包中的 parse_date_time 的解决方案,它将 date 变量解析为 POSIXct 日期时间。

df <- tibble(date = c("Tue Mar 31 13:42:58 +0000 2020",
                      "Sun Apr 05 14:02:10 +0000 2020",
                      "Tue Apr 28 01:14:28 +0000 2020",
                      "Sat Mar 14 05:15:56 +0000 2020",
                      "Tue Mar 24 09:06:12 +0000 2020",
                      "Thu Oct 24 18:47:10 +0000 2019"))



library(lubridate)
df$date <- parse_date_time(df$date, "%a %b %d %H:%M:%S %z %Y")

  date               
  <dttm>             
1 2020-03-31 13:42:58
2 2020-04-05 14:02:10
3 2020-04-28 01:14:28
4 2020-03-14 05:15:56
5 2020-03-24 09:06:12
6 2019-10-24 18:47:10

reprex package (v0.3.0)

于 2020-11-13 创建