我想将R中的因子变量转换为二进制。在着名的虹膜的情况下,我希望如果它不是versicolor重新编码到其他。我已经考虑过这样的事情了,但它没有按预期工作。我该怎么办?
for(i in 1:150) {
if(iris$Species[i]=="virginica"||iris$Species[i]=="setosa") {
iris$Species[i]="other"
}
}
答案 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)