R 使用While-If循环检索行名称

R 使用While-If循环检索行名称,r,while-loop,R,While Loop,我试图根据数据帧列中的条件检索行名称。我需要使用一个While和If循环来完成这个任务。我从一个类似的问题/答案中借用了一些代码,但无法使用。我想返回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]} cyl_4这是一个奇怪的

我试图根据数据帧列中的条件检索行名称。我需要使用一个While和If循环来完成这个任务。我从一个类似的问题/答案中借用了一些代码,但无法使用。我想返回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]}

cyl_4这是一个奇怪的问题,但我认为这就是你想要的:

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"    
这很奇怪,因为通常当您使用
while
循环时,您希望循环一直运行到满足某个条件,但在您的情况下,您特别希望
cyl=4

如果希望打印出所有气缸,可以将
If(j==4)
更改为
If(j==i)

这是一个奇怪的问题,但我认为这正是你想要的:

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"    
这很奇怪,因为通常当您使用
while
循环时,您希望循环一直运行到满足某个条件,但在您的情况下,您特别希望
cyl=4

如果希望打印出所有气缸,可以将
If(j==4)
更改为
If(j==i)

不要使用循环。照办

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

不要使用循环。照办

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

这段代码显然无法运行。if语句的括号不匹配。请编辑以反映您实际运行的代码。此代码显然不会运行。if语句的括号不匹配。请编辑以反映实际运行的代码。建议不要使用循环(+1)是正确的。不过我建议不要使用
subset()
,直接使用
[,]
符号即可。谢谢您的回复。我知道有更简单的解决方案,但这个问题的目的是学习如何使用while循环。我在网上找不到多少有用的指导。这很有效。我更改了打印函数并将输出分配给向量。您建议不使用循环(+1)是正确的。不过我建议不要使用
subset()
,直接使用
[,]
符号即可。谢谢您的回复。我知道有更简单的解决方案,但这个问题的目的是学习如何使用while循环。我在网上找不到多少有用的指导。这很有效。我更改了打印功能,并将输出分配给向量。