我试图分析大数据集。其中一列是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()
函数,但是他们也犯了同样的错误。这究竟是什么意思,我该如何解决?
答案 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")