我試圖根據數據框的列中的條件檢索行名稱。我需要使用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]}
謝謝。
我試圖根據數據框的列中的條件檢索行名稱。我需要使用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]}
謝謝。
這是一個奇怪的問題,但我認爲這是你想要什麼:
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)
。
你建議不要使用循環(+1)。我建議不要使用'subset()',只要直接輸入'[,]'表示法。 – Phil
感謝您的回覆。我明白有更簡單的解決方案,但這個問題的目的是學習如何使用while循環。我在網上找不到有用的指導。這很好。我改變了打印功能並將輸出分配給一個向量。 –
請勿使用循環。只是做
rownames(mtcars[mtcars$cyl==4,])
這段代碼顯然不會運行。你的if語句有一個無與倫比的括號。請編輯以反映您實際運行的代碼。 – Barker