我试图根据数据框的列中的条件检索行名称。我需要使用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