2016-11-05 3 views
0

Ich versuche, die Zeilennamen basierend auf einer Bedingung in einer Spalte eines Datenrahmens abzurufen. Ich brauche eine While- und eine If-Schleife, um das zu erreichen. Ich habe mir einen Code aus einer ähnlichen Frage/Antwort ausgeliehen, kann ihn aber nicht zum Laufen bringen. Ich möchte die rownames für alle Werte in Spalte mtcars $ Zyl zurückzuversetzen gleich 4. Hier ist, was ich habe:Abrufen von Zeilennamen mit While Wenn Schleife

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

Dank.

+0

Dieser Code wird eindeutig nicht ausgeführt werden. Ihre if-Anweisung hat eine nicht passende Klammer. Bitte bearbeiten Sie den Code, den Sie tatsächlich ausführen. – Barker

Antwort

3

Es ist eine seltsame Frage, aber ich denke, das ist, was Sie wollen:

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"  

Sie könnten tatsächlich bekommen leicht die Antwort ohne die Schleifen:

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" 

Es ist komisch, weil in der Regel, wenn Sie die Verwendung while Schleife, möchten Sie die Schleife zu laufen, bis eine bestimmte Bedingung erfüllt ist, aber in Ihrem Fall möchten Sie speziell cyl = 4. Wenn Sie möchten, dass alle Zylinder ausgedruckt werden, können Sie die if(j == 4) in if(j == i) ändern.

+0

Sie haben recht, wenn Sie vorschlagen, keine Schleife (+1) zu verwenden. Ich würde empfehlen, nicht 'subset()' zu verwenden, sondern einfach direkt auf '[,]' notation. – Phil

+0

Danke für die Antworten. Ich verstehe, dass es einfachere Lösungen gibt, aber der Zweck dieser Frage war zu lernen, wie While-Schleifen verwendet werden. Ich habe nicht viel hilfreiche Anleitung online gefunden. Das hat super funktioniert. Ich habe die Druckfunktion geändert und die Ausgabe einem Vektor zugewiesen. –

1

Verwenden Sie keine Schleife. Just do

rownames(mtcars[mtcars$cyl==4,])