2016-11-05 34 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,])