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 创建
我有一个包含大约 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 创建