使用While If循环检索行名称

时间:2016-11-05 01:13:19

标签: r while-loop

我正在尝试根据数据框列中的条件检索行名。我需要使用While和If循环来完成此任务。我从一个类似的问题/答案中借用了一些代码,但无法使其发挥作用。我想返回列mtcars $ cyl中等于4的所有值的rownames。这就是我所拥有的:

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

感谢。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

不要使用循环。只是做

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