R:为什么我的载体会混乱?

时间:2010-11-25 12:28:51

标签: r vector zoo

假设我有这个动物园载体

mine <- zoo(c(rep(0,4),rep(1,4),rep(0,5),rep(1,23),rep(0,4),rep(1,2)),as.chron(seq(1:42)))

我想以某种顺序提取几个元素

> mine[14]
01/15/70 
       1 
> mine[5]
01/06/70 
       1 
> mine[41]
02/11/70 
       1 

它有效! 但现在我尝试以不同的方式做到这一点

zz <- c(14, 5, 41)
mine[zz]

01/06/70 01/15/70 02/11/70 
       1        1        1 

我不知道为什么我会以不同的顺序得到它。 我怎样才能保留我想要的订单,我的清单顺序? 我不介意它是列表,矢量,列数还是行数,但我想按照我要求的顺序得到它。

欢呼声

1 个答案:

答案 0 :(得分:4)

为什么动物园这样做的答案是它有一个函数[[.zoo)的方法,它从子集化值创建一个新的动物园对象,它在逻辑上想要重新排序所以它是一个有效的动物园对象。

您可以通过相关的访问者功能访问时间索引和数据来实现您的目标:

> index(mine)[c(14, 5, 41)]
[1] 01/15/70 01/06/70 02/11/70
> coredata(mine)[c(14, 5, 41)]
[1] 1 1 1

如果你想把它组合成一个步骤,那就写下你自己的乐趣:

myExtract <- function(x, want) {
    out <- coredata(mine)[want]
    names(out) <- index(x)[want]
    out
}

给出了:

> myExtract(mine, want = c(14, 5, 41))
01/15/70 01/06/70 02/11/70 
       1        1        1