【问题标题】:R/zoo: index entries in ‘order.by’ are not uniqueR/zoo:“order.by”中的索引条目不是唯一的
【发布时间】:2013-07-01 02:59:36
【问题描述】:

我有一个 .csv 文件,其中包含 4 列数据,对应一列日期/时间,间隔为一分钟。缺少一些时间戳,所以我试图生成缺少的日期/时间并在 Y 列中为它们分配 NA 值。我以前使用其他格式完全相同的 .csv 文件完成了此操作,没有任何问题。代码是:

# read the csv file
har10 = read.csv(fpath, header=TRUE);

# set date
har10$HAR.TS<-as.POSIXct(har10$HAR.TS,format="%y/%m/%d %H:%M")

# convert to zoo
df1.zoo<-zoo(har10[,-1],har10[,1]) #set date to Index

# merge and generate NAs
df2 <- merge(df1.zoo,zoo(,seq(start(df1.zoo),end(df1.zoo),by="min")), all=TRUE)

# write zoo object to .csv file in Home directory
write.zoo(df2, file = "har10fixed.csv", sep = ",")

在转换为 POSIXct 后,我​​的数据看起来像这样(大约一整年),这似乎很好:

                    HAR.TS        C1       C2         C3        C4
1      2010-01-01 00:00:00 -4390.659 5042.423 -2241.6344 -2368.762
2      2010-01-01 00:01:00 -4391.711 5042.056 -2241.1796 -2366.725
3      2010-01-01 00:02:00 -4390.354 5043.003 -2242.5493 -2368.786
4      2010-01-01 00:03:00 -4390.337 5038.570 -2242.7653 -2371.289

当我执行“转换为动物园”步骤时,出现以下错误:

 Warning message:
 In zoo(har10[, -1], har10[, 1]) :
   some methods for “zoo” objects do not work if the index entries in ‘order.by’ are not unique

我检查了重复的条目,但没有得到任何结果:

> anyDuplicated(har10)
[1] 0

有什么想法吗?我不知道为什么我在这个文件上收到这个错误,但它对以前的文件有效。谢谢!


编辑:可重现的形式:

编辑 2:必须删除数据/代码,抱歉!

【问题讨论】:

  • 我尝试将其设置为 GMT 但没有骰子。数据以 JST(日本标准时间)记录,因此没有 DST。此外,我还成功地在其他三个 .csv 文件上运行了相同的代码,格式完全相同,在一种情况下包括相同的日期/时间范围。这就是让我感到困惑的原因 - 我不知道为什么会有所不同。
  • 我已经编辑了我的原始帖子以包含我的文件(Dropbox 链接)和完整代码。不过,我必须在解决问题后将其删除。
  • 分别尝试前半部分数据和后半部分数据,并继续这样做,直到您可以仅用几行数据重现问题。然后发布。
  • 我有超过 400,000 行数据。这可能需要一些时间......
  • @JoshuaUlrich 的答案可能就是您正在寻找的。只是一个简短的注释:看看read.zoo。您可以通过使用它来节省一些代码行。它看起来像这样:df1.zoo &lt;- read.zoo(fpath, index.column = 1, FUN = function(x) as.POSIXct(strptime(x, format = "%y/%m/%d %H:%M")), sep = ",", header = TRUE)

标签: r date time-series zoo


【解决方案1】:

anyDuplicated(har10) 告诉您是否有任何 完整的行 重复。 zoo 对索引发出警告,因此您应该运行anyDuplicated(har10$HAR.TS)sum(duplicated(har10$HAR.TS)) 将显示有近 9,000 个重复的日期时间。第一个重复出现在第 311811 行附近,其中10/08/19 13:10 出现了两次。

【讨论】:

  • 谢谢!我还是 R 的新手,但我不敢相信它是如此简单。我现在正在收拾行李,但明天会检查一下 - 我认为您可能是对的。
  • 是的,这行得通。我的数据又一次充满了错误和重复——太棒了! :(谢谢!
【解决方案2】:

以及处理重复的索引(参见?zoo?aggregate.zoo

## zoo series with duplicated indexes
z3 <- zoo(1:8, c(1, 2, 2, 2, 3, 4, 5, 5))
plot(z3)

## remove duplicated indexes by averaging
lines(aggregate(z3, index, mean), col = 2, type = "o")

## or by using the last observation
lines(aggregate(z3, index, tail, 1), col = 4)

【讨论】:

  • 很高兴知道。很好的例子。然而,这不是问题的答案。
猜你喜欢
  • 1970-01-01
  • 2019-08-10
  • 1970-01-01
  • 2014-05-22
  • 2013-08-14
  • 2015-04-16
  • 2012-04-16
  • 2011-06-28
  • 1970-01-01
相关资源
最近更新 更多