我需要替换数据帧中因子列的级别.例如,我如何用virginica
替换数据集中的Species个单元格?
我本以为以下功能会起作用,但它会生成一条警告消息,并简单地插入NAs:
iris$Species[iris$Species == 'virginica'] <- 'setosa'
我需要替换数据帧中因子列的级别.例如,我如何用virginica
替换数据集中的Species个单元格?
我本以为以下功能会起作用,但它会生成一条警告消息,并简单地插入NAs:
iris$Species[iris$Species == 'virginica'] <- 'setosa'
我敢打赌,问题是当你试图用一个新的值替换值时,这个值目前不属于现有因子的级别:
levels(iris$Species)
# [1] "setosa" "versicolor" "virginica"
你的例子很糟糕,这很有效:
iris$Species[iris$Species == 'virginica'] <- 'setosa'
这很可能会造成您在自己的数据中看到的问题:
iris$Species[iris$Species == 'virginica'] <- 'new.species'
# Warning message:
# In `[<-.factor`(`*tmp*`, iris$Species == "virginica", value = c(1L, :
# invalid factor level, NAs generated
如果你先提高因子水平,它就会起作用:
levels(iris$Species) <- c(levels(iris$Species), "new.species")
iris$Species[iris$Species == 'virginica'] <- 'new.species'
如果你想用"物种B"取代"物种A",你最好用
levels(iris$Species)[match("oldspecies",levels(iris$Species))] <- "newspecies"