2017-06-28 17 views
0

データフレーム内の行の出現を計算しようとしていますが、結果が期待通りにならない。forループでifを使用する方法R

PS:generaldfはdata.frameで、useridはあなたのコードの作業がreturn(y)を取り除くようにするに整数

y<-0 

     for(i in seq_len(nrow(generaldf))) 
     { 
      if (generaldf$userid==1) 
      y <-y+1 
     } 

return(y) 
+4

'userid'が1に等しい回数を数えようとしていますか? 'sum(generaldf $ userid == 1)'は 'for'ループなしでそれを行います – bouncyball

答えて

1

の列です。 return()は関数用です。ここで結果を印刷できます。 print(y)またはちょうど(y)

代わりのためのループがコメントsum(generaldf$userid == 1)で述べた論理ベクトル(真= 1、0 = false)を合計することを検討どちらか - それは、よりエレガントなソリューションです。

+0

ありがとう!それはカウントのために働くが、forループの下に関数を置く場合、使用するのに最適な構文は何か? – chayma

+0

を使用することができます。それはあまり意味がありません。あなたは1行のコードの仕事にアウトソーシングしています。あまり効率的ではありません。しかし、あなたがしなければならない場合は、最後の中括弧(関数が最後の値を返して終了する)の前に関数の最後の演算を行うか、中括弧内から 'return(y)'を呼び出すかこの値と実行を停止します)。これらは同じ目的のための2つのわずかに異なる手段です。 –

0

あなたの投稿に質問はありません。 また、あなたの例はデータなしで再現できません。

これにもかかわらず、あなたの問題はgeneraldf$userid==1であるようです。 generaldf$useridでデータフレームをサブセット化すると、仮定した単一の値ではなく、列全体(ベクトル)が得られます。

おそらく、データフレームについてもう少し詳しく知る必要があります。 a tutorial or twoをご覧ください。

PS/Jindra Lackoが提案したようにループを回避することは、発生回数をカウントする方法です。

関連する問題