【发布时间】:2015-03-05 09:24:54
【问题描述】:
我正在尝试使用strptime 函数将记录转换为日期和时间格式。但是,我不确定为什么会出现错误:
要替换的项目数不是替换长度的倍数。
我尝试使用length 函数检查记录的长度,但两者的长度相同。
data <- DT
head(data[6])
# column
# 1 2014-12-22 23:53:48
# 2 2014-12-22 23:20:34
# 3 2014-12-22 23:20:30
# 4 2014-12-22 23:20:16
# 5 2014-12-22 23:20:07
# 6 2014-12-22 23:05:49
data[,6] <- as.character(data[,6])
temp_file <- matrix(0,nrow=nrow(data))
temp_file[1] <- strptime(data[1, 6],"%F %T")
# Warning message:
# In temp_file[1] <- strptime(data[1, 6], "%F %T") :
# number of items to replace is not a multiple of replacement length
length(temp_file[1])
# [1] 1
length(data[1,6])
# [1] 1
length(strptime(data[1, 6], "%F %T") )
# [1] 1
非常感谢任何帮助。
谢谢!
【问题讨论】:
-
这实际上是一个好问题。这不是错误,而是警告,但您得到的结果是错误的,因此您可以将其视为错误。发生这种情况的原因是因为在 R 中定义了
matrix,它只能得到原子向量。当您尝试将strptime传递给矩阵时,它的类是"POSIXlt" "POSIXt",因此它取消分类并因此返回其属性列表(长度大于1),即unclass(strptime(data[1,1],"%F %T"))。第一个值为48秒。这正是您现在在temp_file[1]中所拥有的。 -
因此,要么使用
data.frame而不是matrix,要么尝试将向量转换为原子向量,例如:temp_file[1] <- as.character(strptime(data[1,1],"%F %T"))
标签: r dataframe matrix strptime