尝试在R中从字符转换为日期时出错

时间:2015-04-12 01:02:17

标签: r

我试图分析大数据集。其中一列是starttime列,其原始类是character。

我使用了这个命令:

data$starttime = strptime(data$starttime, "%Y-%m-%d %H:%M:%S).

我收到此错误消息:

**Error in `[<-.data.table`(x, j = name, value = value) : 
  (list) object cannot be coerced to type 'double'**

另外:警告信息:

**In `[<-.data.table`(x, j = name, value = value) :
  Supplied 11 items to be assigned to 13118401 items of column 'startime' (recycled leaving remainder of 10 items).**

我还尝试了as.Date()ymd_hms()函数,但是他们也犯了同样的错误。这究竟是什么意思,我该如何解决?

1 个答案:

答案 0 :(得分:5)

我认为问题在于POSIXlt结构的性质(是11个向量的列表)。你可以通过查看

来看到这一点
names(unclass(strptime("2015-01-01", format = "%Y-%m-%d")))
# [1] "sec"    "min"    "hour"   "mday"   "mon"    "year"   "wday"   "yday"   "isdst"  "zone"  
# [11] "gmtoff"

在数据框中列出一个列表并非不可能,但可能会导致不必要的问题。最小的例子:

library(data.table)
df1 <- data.table(a = 1:2, time = sprintf("2015-01-%02d", 1:2))
df1$time <- strptime(df1$time, format = "%Y-%m-%d")

# Warning messages:
#   1: In `[<-.data.table`(x, j = name, value = value) :
#   Supplied 11 items to be assigned to 2 items of column 'time' (9 unused)

library(dplyr)
df1 <- data_frame(a = 1:2, time = strptime(sprintf("2015-01-%02d", 1:2), format = "%Y-%m-%d"))
df1
# Warning message:
#   In `[<-.data.frame`(`*tmp*`, is_list, value = list(time = c("<dbl[2]>",  :
#   replacement element 1 has 11 rows to replace 2 rows

我认为使用POSIX c t至少可以解决您的一个问题:

as.POSIXct(data$starttime, format = "%Y-%m-%d %H:%M:%S")