4

R でサンプラーをプログラミングしていますが、これは基本的に大きな for ループであり、反復ごとにベクトル内の遷移の数をカウントする必要があります。0 と 1 を含む k という名前のベクトルがあり、ベクトルには 1000 のエントリがあります。

次の、恐ろしく遅いコードを使用しました。

#we determine the number of transitions n00,n01,n10,n11
  n00=n01=n10=n11=0 #reset number of transitions between states from last time
  for(j in 1:(1000-1)){
    if(k[j+1]==1 && k[j]==0) {n01<-n01+1}
    else { if(k[j+1]==1 && k[j]==1) {n11<-n11+1}
           else { if(k[j+1]==0 && k[j]==1) {n10<-n10+1}
                  else{n00<-n00+1}
           }

    }
  }

したがって、ループが進むたびに、変数 n00、n01、n10、n11 はベクトル内の遷移をカウントします。たとえば、n00 は、0 の後に別の 0 が続く回数をカウントします。

これは非常に遅く、私は R に非常に慣れていないので、ここではちょっと必死です。可能であれば、grepの使用方法がわかりません。

ご協力ありがとうございました

4

3 に答える 3

1

n00 と n11 のケースを区別することを気にしない場合、これははるかに簡単になります。

x <- sample(0:1,20,replace = TRUE)
#  [1] 0 0 0 0 0 1 0 1 1 0 0 0 1 0 0 1 0 0 0 0

table(diff(x))      
# -1  0  1 
#  4 11  4 

質問は、主にトランジションに関心があると言っているので、これは受け入れられるかもしれませんが、そうでない場合は、他の回答のいずれかが望ましいでしょう.

于 2013-09-26T18:17:47.460 に答える