R 中的 strptime 错误:输入字符串太长

Jus*_*n M 3 csv r date

我似乎无法将数据从 csv 转换为正确的日期类。我使用的是包含 1033 个日期的 csv。我已将 CSV 保存为“YYYYMMDD”格式

这是我导入 csv 的代码(似乎有效):

bd <- read.csv('birthdaysExample.csv', 
           header = FALSE, 
           sep = ',')
Run Code Online (Sandbox Code Playgroud)

我可以在R Studio中看到数据:

> head(bd)
        V1
1 20141125
2 20140608
3 20140912
4 20140526
5 20140220
6 20140619
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试转换日期时,我收到错误: “strptime(bd, format = "%Y%m%d") 中的错误:输入字符串太长。”

下面是我的代码:

better_bds <- strptime(bd,format='%Y%m%d')
Run Code Online (Sandbox Code Playgroud)

我什至尝试检查并验证我的所有日​​期实际上都有 8 个字符:

> table(nchar(bd$V1) != 8 | nchar(bd$V1) != 8)

FALSE 
1033
Run Code Online (Sandbox Code Playgroud)

所以我不知道下一步该转向哪里,如果有人能指出我正确的方向,我将不胜感激!

Jos*_*ich 5

问题是这bd是一个单列 data.frame 并且strptime需要一个字符向量。如果您不将字符向量传递给strptime,它将调用as.character(x)您传入的任何内容。调用as.character(bd)会产生您可能意想不到的结果。

bd <- structure(list(V1 = c(20141125L, 20140608L, 20140912L, 20140526L,
  20140220L, 20140619L)), .Names = "V1", class = "data.frame",
  row.names = c(NA, -6L))
as.character(bd)
# [1] "c(20141125, 20140608, 20140912, 20140526, 20140220, 20140619)"
Run Code Online (Sandbox Code Playgroud)

您需要在将字符向量列传bd递给之前对其进行子集化strptime(正如Hugh 在他的评论中建议的那样)。

strptime(bd[,1], format="%Y%m%d")
Run Code Online (Sandbox Code Playgroud)

另外,由于您似乎没有任何实际时间信息,我建议您使用 Date 类。这将防止您遇到任何潜在的时区问题。

as.Date(as.character(bd[,1]), format="%Y%m%d")
Run Code Online (Sandbox Code Playgroud)