【问题标题】:How to formulate for loop here如何在这里制定 for 循环
【发布时间】:2022-10-12 21:21:57
【问题描述】:

我有一个包含汽车信息的 csv 文件(价格、型号、颜色等) 我已通过 read.csv 将其上传到 R 一些变量是基于文本的分类变量,例如模型、颜色和燃料类型 我想出了一个 for 循环来找出如何找到这些基于文本的分类变量

for(i in 1:dim(car)[2]){ 
  if(is.character(car[,i])){
  print(names(car)[i])
  }
}

###car 是文件名 现在我想在循环中添加如何查找列的索引。例如 Model 的列是 2 但我应该如何将它集成到这个循环中?以下是我到目前为止的内容,但响应是“Integer(0)”。

for(i in 1:dim(car)[2]){ 
  if(is.character(car[,i])){ 
    print(which(i==colnames(car)))}
}

【问题讨论】:

    标签: r for-loop indexing element


    【解决方案1】:

    dim(car)[2]car 的列数。 (ncol() 是一种更常见的获取数据帧数字的方法)。

    因此1:dim(car)[2]1, 2, 3, ... 最多列数。

    所以for(i in ...) 意味着i 将是1,然后i 将是2,....直到列数。

    当您的if 语句为TRUE 时,i 的当前值为列号。因此,您希望在 if() 语句中包含 print(i)

    您的尝试 print(which(i==colnames(car))) 失败了,因为 colnames(car)名字列,i数字的列。名称和编号不同。

    一种更类似于 R 的方法是使用 sapply 而不是循环。像这样的东西:

    char_cols = sapply(cars, is.character)
    char_cols # named vector saying if each column is character or not
    char_cols[char_cols] # look only at the character columns
    

    【讨论】:

    • 感谢您的回复。这是一个作业中的问题,我们只需要修改循环。但是,由于您对“i”是一个数字的评论,我修改了我的循环,我相信它现在可以工作了。
    【解决方案2】:

    “哪个”功能仍然可以使用。从 Gregor Thomas 的回复中,有一种方法可以修改,有一种方法可以修改 for 循环

    for(i in 1:ncol(car)){ 
      if(is.character(car[,i])){ 
      print(names(car)[i])
      print(which(names(car)[i]==colnames(car)))
      }
    } 
    

    enter image description here

    • 我们首先通过打印(名称(汽车)[i])
    • 然后我们只需要求 R 打印与“汽车”数据集列中的名称匹配的名称(我们在上面收到的)

    检查下面的链接以获取图片。再次感谢Gregor Thomas先生

    【讨论】:

      猜你喜欢
      • 2023-01-13
      • 1970-01-01
      • 2018-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多