2016-11-05 20 views
0

データフレームの列の条件に基づいて行名を取得しようとしています。これを達成するために、WhileループとIfループを使用する必要があります。私は同様の質問/回答からいくつかのコードを借りましたが、それを動作させることはできません。Whileループを使用して行名を取得する

cyl_4 <- 0 
i <- 0 
while(i <= 32){ 
    i <- i+1 
    if(rownames(mtcars)[mtcars$cyl == 4] 
    cyl_4 <- mtcars[i,1]} 

ありがとう:私はここで私が持っているものだ4と等しく、列mtcars $ CYLのすべての値のためrownamesを返したいです。

+0

このコードは実行されません。あなたのifステートメントにはカッコが似ていません。実際に実行しているコードを反映するように編集してください。 – Barker

答えて

3

それは奇妙な質問ですが、私は、これはあなたが欲しいものだと思う:

i = 0 
while (i <= 8) { 
     j = i 
     if (j == 4) { 
      print(paste("for", j, "cylinders")) 
      print(rownames(subset(mtcars, subset = (cyl == j)))) 
     } 
     i = i + 2 
} 
[1] "for 4 cylinders" 
[1] "Datsun 710"  "Merc 240D"  "Merc 230"  "Fiat 128"  
[5] "Honda Civic" "Toyota Corolla" "Toyota Corona" "Fiat X1-9"  
[9] "Porsche 914-2" "Lotus Europa" "Volvo 142E"  

あなたが実際に簡単にループせずに答えを得ることができます:

rownames(subset(mtcars, subset = (cyl == 4))) 
[1] "Datsun 710"  "Merc 240D"  "Merc 230"  "Fiat 128"  
[5] "Honda Civic" "Toyota Corolla" "Toyota Corona" "Fiat X1-9"  
[9] "Porsche 914-2" "Lotus Europa" "Volvo 142E" 

通常使用する場合ので、それは奇妙ですwhileループでは、特定の条件が満たされるまでループを実行したい場合がありますが、具体的にはcyl = 4が必要です。 すべてのシリンダーを印刷する場合は、if(j == 4)if(j == i)に変更することができます。

+0

ループ(+1)を使用しないことをお勧めします。 'subset()'を使わないことをお勧めします。ちょうど '[、]'表記のために直進してください。 – Phil

+0

応答ありがとう。簡単な解決法があると私は理解していますが、この質問の目的はwhileループを使用する方法を学ぶことでした。私はオンラインで多くの有益な指導を見つけることはなかった。これはうまくいった。私は印刷機能を変更し、出力をベクトルに割り当てました。 –

1

ループを使用しないでください。ちょうど

rownames(mtcars[mtcars$cyl==4,]) 
関連する問題