1

私はRにまったく慣れておらず、C++のバックグラウンドを持っています。複数の行と列を持つデータフレームがあります。私の質問は、これを別の方法で実行するにはどうすればよいかということです。私は6万行以上と約15列あります。これを行うためのより良い方法はありますか?ヘルプは大歓迎です!

counter <-0

 for(j in 7:length(SeaStateData[3,]))
 {
  for( i in 1:length(SeaStateData[,3]))
      {


        if(!is.na(SeaStateData[i,j]) & !is.na(SeaStateData[i+1,j]))
        if(SeaStateData[i,j] == SeaStateData[i+1,j])
         {
          counter <- counter + 1
         }

       }
 }
4

1 に答える 1

5

私はこれを試してみます:

nr <- nrow(SeaStateData)
nc <- ncol(SeaStateData)
counter <- sum(SeaStateData[1:(nr - 1), 7:nc] ==
               SeaStateData[2:nr, 7:nc],
               na.rm = TRUE)

サブセットは、1行の相対オフセットを持つ2つの部分行列を表します。演算子は、2つの項目が一致するかどうか、異なるかどうか、およびそれらの1つがであるかどうか==を含む論理ベクトル(この場合は、次元情報が追加された単なるベクトルである行列)を生成します。論理ベクトルを超えると、すべての値がカウントされます。属性は、値を削除するように指示します。そうでなければ、同様になります。とほぼ同じです。TRUEFALSENANAsumTRUEna.rmNAsumNAsum(…, na.rm = TRUE)sum(na.omit(…))

于 2012-07-09T11:37:59.497 に答える