我有两个看似相同的动物园对象,由不同时间段的 csv 文件中的相同命令创建。我尝试将它们组合成一个长动物园,但由于“索引重叠”错误而失败。('merge' 'c' 或 'rbind' 都会产生相同错误文本的变体。)据我所知,没有重复,时间段也不重叠。我究竟做错了什么?我在 Windows 7 64 位上使用 R 版本 3.0.1,如果这有影响的话。
> colnames(z2)
[1] "Amb" "HWS" "Diff"
> colnames(t.tmp)
[1] "Amb" "HWS" "Diff"
> max(index(z2))
[1] "2012-12-06 02:17:45 GMT"
> min(index(t.tmp))
[1] "2012-12-06 03:43:45 GMT"
> anyDuplicated(c(index(z2),index(t.tmp)))
[1] 0
> c(z2,t.tmp)
Error in rbind.zoo(...) : indexes overlap
>
更新:在尝试制作可重现的案例时,我得出结论,这是一个实现错误,因为我正在处理大量行:如果最终结果超过 311434 行,则会失败。
> nrow(c(z2,head(t.tmp,n=101958)))
Error in rbind.zoo(...) : indexes overlap
> nrow(c(z2,head(t.tmp,n=101957)))
[1] 311434
# but row 101958 inserts fine on its own so its not a data problem.
> nrow(c(z2,tail(head(t.tmp,n=101958),n=2)))
[1] 209479
我很抱歉,但我没有 R 脚本技能来制作一个临界长度的动物园,希望有人能帮助我..
更新 2-回应 Jason 的建议..:问题出在 MATCH 中,但我的 R 技能不足以知道如何解释它 - 这是否意味着 MATCH 在 xt 中找到重复值而 anyDuplicated 没有?
> x.t <- c(index(z2),index(t.tmp));
> length(x.t)
[1] 520713
> ix <- ORDER (x.t)
> length(ix)
[1] 520713
> x.t <- x.t[ix]
> length(ix)
[1] 520713
> length(x.t)
[1] 520713
> tx <- table(MATCH(x.t,x.t))
> max(tx)
[1] 2
> tx[which(tx==2)]
311371 311373 311378 311383 311384 311386 311389 311392 311400 311401
2 2 2 2 2 2 2 2 2 2
> anyDuplicated(x.t)
[1] 0