我正在尝试根据数据框列中的条件检索行名。我需要使用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]}
感谢。
答案 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,])