您正在使用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
适合数据集的任何时区。