1

私は次のデータを持っています:

measurement <- c(1:30)
angle <- rnorm(30, 0, 0.4)
data.1 <- data.frame(measurement, angle)

そして、4つの異なるシナリオでTRUE値を返す関数を作成したいと思います。

   1. When 'angle' >  0.3 
or 2. When 'angle' < -0.3 
or 3. When 'angle' + the previous 'angle' >  0.3 
or 4. When 'angle' + the previous 'angle' < -0.3 

forループで試してみましたが、次のように試してみましたが、角度と1タイムステップ前に測定された角度の合計を含める方法がわかりません(つまり、私はここで行うのは間違っていますが、どうすれば改善できますか?大量のデータセットを処理するため、計算上最も手間のかからない方法で行うことが望ましいです):

n<-data.1$angle
function1 <- function(n){
    return(n>0.3 | n<(-0.3) | (n+(n-1))>(0.3) | (n+(n-1))<(-0.3))
}

Rの初心者であることをお詫びしますが、Rのドキュメントの迷宮を散歩した後、ここで質問する以外に方法はありませんでした。助けてくれてありがとう!

4

1 に答える 1

6

角度ごとに 1 つずつ行うのではなく、ベクトル化された形式で行うことができます。

abs(data.1$angle) > 0.3 | abs(data.1$angle + c(0, head(data.1$angle,-1))) > 0.3

abs(data.1$angle) > 0.3 - 最初と 2 番目の条件。
abs(data.1$angle + c(0, head(data.1$angle,-1))) > 0.3 - すべての角度を取り、 を使用して前の角度を追加しc(0, head(., -1))ます。次に、もう一度absで 0.3 と -0.3 を確認します。

私は得る:

# [1] FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
# [15]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE
# [29]  TRUE  TRUE
于 2013-03-07T16:32:19.250 に答える