2016-12-12 3 views
1

Rのファクタ変数をバイナリに変換する必要があります。有名な虹彩の場合、私はそれがversicolorでなければ、他のものにそれをコード化したい。私はこのようなことについて考えましたが、期待どおりに動作しません。私に何ができる?いくつかのレベルをバイナリに変換するファクタ変数R

for(i in 1:150) { 

      if(iris$Species[i]=="virginica"||iris$Species[i]=="setosa") { 

      iris$Species[i]="other" 
      } 
     } 
+1

'アイリス$ is_versicolor <:それは私だったら、私はより多くのような何かをするだろう== 'versicolor')+ 1] 'あなたが空想を得たいなら。 – alistaire

+0

新しいレベルの 'levels(iris $ Species)< - c(levels(iris $ Species)、" other ")'を初めて作成した場合、ループは機能します。これが単なる学習のためのものであれば、セッションで内部データセットを書き直すべきではありません。カウンターは 'for(i in 1:150)'でなければなりません。ところで、ループはまったく必要ありません。 –

+0

@alistaire(iris $ is_versicolor < - iris $ Species == 'versicolor')は、versicolorだけでclumnsを作成します。私は2つのレベルのversicolorとversicolor以外のものを入れたいです。 –

答えて

3

リストを使用してレベルを再割り当てすると、このような場合に役立ちます。

levels(iris$Species) <- 
    list(versicolor = "versicolor", 
     other = c("setosa", "virginica")) 

levels(iris$Species) 

より一般的なアプローチは、(あなたがに対処するためのレベルの多くを持っている場合)が考えられます。

levels(iris$Species) <- 
    list(versicolor = "versicolor", 
     other = levels(iris$Species)[!levels(iris$Species) %in% "versicolor"]) 

levels(iris$Species) 

欠点は、このあなたの元のデータを上書きするということです。 - アイリス$種== 'versicolor'`や `C(' その他」、 'カワラタケ')[(アイリス$種

iris$versicolor <- iris$Species 
levels(iris$versicolor) <- 
    list(versicolor = "versicolor", 
     other = levels(iris$versicolor)[!levels(iris$versicolor) %in% "versicolor"]) 

levels(iris$versicolor) 
+0

良いアプローチ。読みやすくするために、おそらく 'list(verisicolor =" verisicolor "、other = c(" setosa "、" virginica "))'で明瞭になります。私はあなたがそれを一般的にしたかったと思っていますが、おそらく初心者が迷子になるほど一般的です。 –

+0

私は汎用性を目指していましたが、説明のための最初の例としてコードを追加しました。ポインタをありがとう@PierreLafortune – Benjamin

+0

@ベンジャミンこのアプローチはダミー変数を作成する 'ifelse'よりも好ましいのでしょうか? –

関連する問題