【问题标题】:Invalid type (list) for variable X, where X is a date class变量 X 的类型(列表)无效,其中 X 是日期类
【发布时间】:2014-12-22 16:16:49
【问题描述】:

我有一个如下所示的 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 可以处理这种情况,但问题可能在于小时、分钟和秒的存在。

在列表中寻找类似的错误并没有产生任何有用的见解,有谁知道这里到底是什么问题,或者我能做些什么来解决它?

提前致谢。

【问题讨论】:

  • strptime 返回POSIXlt 这通常不是您想要的。也许您打算使用as.POSIXct()
  • 您在读取数据时需要一个 stringsAsFactors=FALSE 但是当您应用 strptime 函数时这仍然会返回一个 NA 字符串。
  • 这是时区错误吗?
  • @joran 的建议效果很好!当然,我不必删除p.m. 中的点。 stringsAsFactors 或时区似乎都不是问题。谢谢大家,我将使用实际使用的代码发布@joran 的答案。

标签: r datetime plot


【解决方案1】:

按照使用as.POSIXct 的建议,我最终得到了这个 代码(注意我去掉了 plot 命令中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”更改为“剪贴板”,但是当我执行 as.POSIXct 步骤时,我得到了一系列 NA。我发现我需要 stringAsFactors=FALSE 将 df$Date.Col 作为字符返回,但它仍然不起作用!啊啊啊啊! (我什至可以将您的问题作为我的问题重新发布)。
  • stackoverflow.com/questions/27609919/…我再次问了这个问题,因为上面的答案对我不起作用。
猜你喜欢
  • 2018-04-18
  • 1970-01-01
  • 1970-01-01
  • 2021-09-09
  • 1970-01-01
  • 1970-01-01
  • 2020-08-25
  • 1970-01-01
相关资源
最近更新 更多