2010-11-25 7 views
0

レッツは、私はこの動物園ベクトルR:なぜ私のベクトルが乱れていますか?

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 

でそれをやろう。 どうすればいいですか?リストの順番はどうすればいいですか? リストやベクトル、列や行などであれば構いませんが、私が求めている順序で取得したいと思います。

歓声

+2

言語は何ですか? –

+0

再現可能なコードを提供しようとしてください。この例では、動物園パッケージとchronパッケージが必要です。明示されていないバージョンの明示的な環境ではありません – mdsumner

+0

'rep'の' each'引数を使用して、 rep.int(0:1,3)、each = c(4,4,5,23,4,2)) 'となります。 –

答えて

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 
+0

ありがとうございました。これらのような単純な(しかし重要な)ものは、コードが失敗する – skan

関連する問題