因子变量在R中具有几个级别为二进制

时间:2016-12-12 20:13:24

标签: r for-loop

我想将R中的因子变量转换为二进制。在着名的虹膜的情况下,我希望如果它不是versicolor重新编码到其他。我已经考虑过这样的事情了,但它没有按预期工作。我该怎么办?

 for(i in 1:150) {

           if(iris$Species[i]=="virginica"||iris$Species[i]=="setosa") {

            iris$Species[i]="other"
          }
        }

1 个答案:

答案 0 :(得分:3)

使用列表重新分配级别在这些情况下会很有帮助。

levels(iris$Species) <- 
  list(versicolor = "versicolor",
       other = c("setosa", "virginica"))

levels(iris$Species)

更通用的方法(如果你有很多级别要处理)可能是:

levels(iris$Species) <- 
  list(versicolor = "versicolor",
       other = levels(iris$Species)[!levels(iris$Species) %in% "versicolor"])

levels(iris$Species)

缺点是覆盖原始数据。如果是我,我会做更多的事情:

iris$versicolor  <- iris$Species
levels(iris$versicolor) <- 
  list(versicolor = "versicolor",
       other = levels(iris$versicolor)[!levels(iris$versicolor) %in% "versicolor"])

levels(iris$versicolor)