我想將R中的因子變量轉換爲二進制。在着名的虹膜的情況下,我希望,如果它不是雲芝重新編碼到其他。我曾經想過這樣的事情,但它不像預期的那樣工作。我能做什麼?將幾個級別的因子變量轉換爲二進制R
for(i in 1:150) {
if(iris$Species[i]=="virginica"||iris$Species[i]=="setosa") {
iris$Species[i]="other"
}
}
我想將R中的因子變量轉換爲二進制。在着名的虹膜的情況下,我希望,如果它不是雲芝重新編碼到其他。我曾經想過這樣的事情,但它不像預期的那樣工作。我能做什麼?將幾個級別的因子變量轉換爲二進制R
for(i in 1:150) {
if(iris$Species[i]=="virginica"||iris$Species[i]=="setosa") {
iris$Species[i]="other"
}
}
使用列表重新分配級別在這些情況下可能會有所幫助。
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)
好方法。爲了可讀性,可能更清晰地使用list(verisicolor =「verisicolor」,other = c(「setosa」,「virginica」))''。我得到了你想要的一般性,但也許它是如此普遍,新手會迷路。 –
我打算推廣,但是我已經將代碼添加爲第一個示例。感謝指針,@PierreLafortune – Benjamin
@benjamin這種方法比'ifelse'更適合創建虛擬變量嗎? –
'$虹膜is_versicolor < - 虹膜$物種== 'versicolor''或'C(' 其他」, '雲芝')[(虹膜$物種=='versicolor')+ 1]'如果你想變得花俏。 – alistaire
如果你第一次創建了新的關卡level(iris $ Species)<-c(levels(iris $ Species),「other」)'',循環就可以工作。如果這只是爲了學習而已,但是您不應該在會話中重寫內部數據集。而櫃檯應該是'(我在1:150)「。順便說一下,一個循環是完全沒有必要的。 –
@alistaire(iris $ is_versicolor < - iris $ Species =='versicolor')只會創建一個只帶有雜色的柱子嗎?我想兩個層次花斑癬,什麼是不雲芝到其他 –