0

前の行の値に基づいてベクトルのサブセットを選択したいと思います。これはループなしで可能なことですか?より具体的には、時系列表記を使用して(2行目を作成しました)、yを取得しようとしています

x = c(-2,3,-1,2,8,)
y = x(t)[x(t)>0, x(t-1)<0, x(t)-x(t-1)>2]
y  
[1] 3

いつでもループできるので、yのソリューションは本当に必要ありません。しかし、論理ベクトルのインデックス付けにシフト演算子または同様のものがあるかどうかを知ることは非常に興味深いでしょう

4

3 に答える 3

1

あなたが何を探しているのかわかりません。ただし、この単純な目的のために、次を使用できます。

x <- c(-2,3,-1,2,8)
x1 <- x[-length(x)]
z <- x[-1]
y <- z[z>0 & x1<0 & (z-x1)>2]
y

多くの「x(ti)」を操作するためのエレガントな方法はわかりませんが、醜いコードを関数でラップしてから呼び出すことができますfts(x)

fts <- function(x){
  xmat <- sapply(1:10,function(i){
    x[-1:i]

  })
......
}

また、 には;'x(t)-x(t-1)'を使用できます。あなたが使用することができdiff(x)ますx(t)-x(t-i)diff(x,lag=i)

于 2013-07-16T10:41:01.237 に答える
1

他の回答と大差ありませんが、もう少しコンパクトです。

x[x > 0 & 
    c(FALSE, head(x,-1) < 0) & 
    c(FALSE, diff(x) > 2)]
于 2013-07-16T11:12:48.093 に答える
0

これは、私が望んでいたことを達成するために見つけたものです

x = c(-2,3,-1,2,8)
x = zoo(x)
y = x[x>0 & lag(x,-1)<0 & (x-lag(x,-1))>2]
y
2 4 
3 2 

ベクトルのサイズを変更することなく、ラグ(x、-i)を非常にエレガントに処理します

于 2013-09-10T10:06:51.873 に答える