2016-11-05 32 views
0

我試圖根據數據框的列中的條件檢索行名稱。我需要使用While和If循環來完成此操作。我從類似的問題/答案中借用了一些代碼,但無法使其運行。我想返回rownames列mtcars $ cyl等於4的所有值。這是我有:使用雖然如果循環檢索行名稱

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

謝謝。

+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,])