变量X的类型无效(列表),其中X是日期类。

3

我有一个CSV文件,看起来像这样(请注意,它使用;作为列分隔符和,作为小数标记):

Values;Date.Col
911;20/12/2013 04:05:01 p.m.
124,82;23/12/2013 09:43:03 a.m.
287;23/12/2013 09:44:15 a.m.
37,3;23/12/2013 09:45:26 a.m.
448,4;23/12/2013 09:46:50 a.m.
432,5;23/12/2013 09:48:31 a.m.

无论如何,我对绘制Values的行为随时间变化感兴趣,因此我执行以下命令("tmp2.csv"是文件名):

df <- read.table("tmp2.csv", header = T, dec = ',', sep = ';')
df$Date.Col <- strptime(df$Date.Col, "%d/%m/%Y %I:%M:%S %p")
str(df)
plot(Values ~ Date.Col, df, type = 'l')

一切似乎都很顺利,直到最后一个命令出现以下错误信息:

Error in (function (formula, data = NULL, subset = NULL, na.action = na.fail,  : 
  invalid type (list) for variable 'Date.Col'

在过去,我将数值变量绘制为日期类向量,因此我认为R可以处理这种情况,但也许问题在于小时、分钟和秒的存在。
在列表和SO中查找类似的错误并没有提供任何有用的见解,是否有人知道这里的确切问题,或者我该怎么做才能解决呢?
提前致谢。

2
strptime 返回的是 POSIXlt,通常不是你想要的。也许你想使用 as.POSIXct() - joran
在读取数据时,您需要使用stringsAsFactors=FALSE参数,但是当您应用strptime函数时,仍然会返回一串NA字符串。 - DarrenRhodes
这是一个时区错误吗? - DarrenRhodes
@joran的建议完美地解决了问题!而且,我不必去掉p.m.中的点。似乎既不是stringsAsFactors也不是时区的问题。谢谢大家,我会发布@joran的答案和实际使用的代码。 - Juan
1个回答

2

在使用as.POSIXct的建议下,我最终得到了这段代码(请注意,在绘制命令中我去掉了第一行df,以更好地说明图表是如何运作的):

df <- read.table("tmp2.csv", header = T, dec = ',', sep = ';')
df$Date.Col <- as.POSIXct(df$Date.Col, format = "%d/%m/%Y %I:%M:%S %p")
plot(Values ~ Date.Col, df[-1,], type = 'l')

感谢大家的支持。

这对我不起作用!(我知道这是你的问题@Juan),但它让我发疯。我将您的代码复制到剪贴板中(我在Windows中),并在上面的代码中将“tmp2.csv”更改为“clipboard”,但是当我执行as.POSIXct步骤时,我会得到一系列NAs。我发现我需要stringAsFactors = FALSE将df $ Date.Col返回为字符,但它仍然无法工作!啊啊啊!(我甚至可能会将您的问题重新发布为我的问题)。 - DarrenRhodes
我重新提出了这个问题,因为上面的答案对我没有用。 - DarrenRhodes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接