在zooreg时间序列中查找非唯一索引条目时遇到问题

2024-06-01

我有几年的数据正在尝试将其转化为动物园对象(Dropbox 上的 .csv) https://www.dropbox.com/sh/vg8w8pt16e0v3xs/AABKtWqDkPu9JVKpwBXO36VOa?dl=0。一旦数据被强制转换为动物园对象,我就会收到错误。我在索引中找不到任何重复的内容。

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。

感谢您的帮助!


您正在使用read.zoo(...)错误地。根据文档:

为了处理索引,read.zoo 以索引作为第一个调用 FUN 争论。如果未指定FUN,则如果有多个索引 它们被粘贴在一起,每列之间有一个空格。使用 索引列或粘贴索引列: 1. 如果指定了 tz,则 索引列转换为 POSIXct。 2. 如果指定了格式则 索引列转换为日期。 3. 否则,启发式 尝试在“数字”、“日期”和“POSIXct”之间做出决定。如果格式 和/或 tz 被指定,然后它们被传递给转换函数 以及。

您正在指定format=... so read.zoo(...)将所有内容转换为 Date,而不是 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")

数据导入正确。

EDIT:

正如 @G.Grothendieck 指出的,这也可以工作,而且更简单:

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

你应该设置tz适合数据集的任何时区。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在zooreg时间序列中查找非唯一索引条目时遇到问题 的相关文章

随机推荐