无法在zooreg时间序列中查找非唯一索引条目

时间:2014-12-08 15:42:33

标签: r zoo

我有几年的数据,我试图加入动物园对象(.csv at Dropbox)。一旦数据被强制转换为动物园对象,我就会发出错误。我在索引中找不到任何重复的内容。

df <- read.csv(choose.files(default = "", caption = "Select data source", multi = FALSE), na.strings="*")
df <- read.zoo(df, format = "%Y/%m/%d %H:%M", regular = TRUE, row.names = FALSE, col.names = TRUE, index.column = 1)
Warning message:
In zoo(rval3, ix) :
  some methods for “zoo” objects do not work if the index entries in ‘order.by’ are not unique

我试过了:

sum(duplicated(df$NST_DATI))

但结果是0。

感谢您的帮助!

1 个答案:

答案 0 :(得分:5)

您错误地使用了read.zoo(...)。根据文件:

  

要处理索引,read.zoo调用FUN,索引为第一个   论点。如果未指定FUN,则表示存在多个索引   它们被粘贴在一起,每个列之间都有一个空格。使用   索引列或粘贴索引列:1。如果指定了tz,则为   index列转换为POSIXct。 2.如果指定了格式,那么   索引列将转换为日期。 3.否则,启发式   试图决定&#34;数字&#34;,&#34;日期&#34;和&#34; POSIXct&#34;。如果是格式   然后指定和/或tz,然后将它们传递给转换函数   同样。

您正在指定format=...,因此read.zoo(...)会将所有内容转换为日期,而不是POSIXct。显然,有许多重复的日期。

简单地说,正确的解决方案是使用:

df <- read.zoo(df, FUN=as.POSIXct, format = "%Y/%m/%d %H:%M")
# Error in read.zoo(df, FUN = as.POSIXct, format = "%Y/%m/%d %H:%M") : 
#   index has bad entries at data rows: 507 9243 18147 26883 35619 44355

但你可以看到这也不起作用。这里的问题更加微妙。索引使用POSIXct转换,但在系统时区(我的系统中是美国东部)。引用的行的时间戳与从标准到DST的转换一致,因此美国东部时区的这些时间不存在。如果您使用:

df <- read.zoo(df, FUN=as.POSIXct, format = "%Y/%m/%d %H:%M", tz="UTC")

正确导入数据。

修改

正如@ G.Grothendieck指出的那样,这也可行,而且更简单:

df <- read.zoo(df, tz="UTC")

您应该将tz设置为适合数据集的任何时间段。