【问题标题】:Retrieving row names using While If Loop使用 While If 循环检索行名
【发布时间】:2016-11-05 01:13:19
【问题描述】:

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

谢谢。

【问题讨论】:

  • 这段代码显然不会运行。您的 if 语句有一个不匹配的括号。请编辑以反映您实际运行的代码。

标签: r while-loop


【解决方案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(),直接使用[, ] 表示法。
  • 感谢您的回复。我知道有更简单的解决方案,但这个问题的目的是学习如何使用 while 循环。我在网上找不到太多有用的指导。这很好用。我更改了打印功能并将输出分配给向量。
【解决方案2】:

不要使用循环。做吧

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-28
    • 2019-05-27
    • 2013-02-16
    • 1970-01-01
    • 2012-11-01
    • 2020-05-26
    • 2021-03-23
    • 2023-03-22
    相关资源
    最近更新 更多