我需要替換數據框中因子列的級別。以iris
數據集爲例,我將如何替換中的任何單元格和第列中的setosa
?替換R數據框中的因子列的內容
我希望下面的工作,但它會產生一個警告信息,並簡單地插入來港:
iris$Species[iris$Species == 'virginica'] <- 'setosa'
我需要替換數據框中因子列的級別。以iris
數據集爲例,我將如何替換中的任何單元格和第列中的setosa
?替換R數據框中的因子列的內容
我希望下面的工作,但它會產生一個警告信息,並簡單地插入來港:
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'
對於您所提出的建議的事情你可以只用改變各級levels
:
levels(iris$Species)[3] <- 'new'
有沒有在多列上做一次性的方法?例如,我有多個'TRU'的列E'和'FALSE'的值,我想重新編碼爲'0','1' – UD1989 2015-12-08 03:50:31
@ UD1989,只是使用像'mydf [] < - lapply(mydf,as.numeric)' – 2015-12-08 20:03:07
您可以使用函數revalue
從帕茨卡ge plyr
來替換因子向量中的值。
在您的例子由setosa
更換因素virginica
:
data(iris)
library(plyr)
revalue(iris$Species, c("virginica" = "setosa")) -> iris$Species
如果我不'有沒有舊的價值? //並不想獲取舊值只是爲了在這個方法中使用它 – 2014-11-25 11:51:37
我有同樣的問題。這更好的工作:
確定要修改哪個級別:levels(iris$Species)
"setosa" "versicolor" "virginica"
所以,setosa
是第一個。
然後,寫這樣的:
levels(iris$Species)[1] <-"new name"
,與所有的數據幀一次工作,並在那裏你不必增加新的因素的水平是一個更通用的解決方案:
data.mtx <- as.matrix(data.df)
data.mtx[which(data.mtx == "old.value.to.replace")] <- "new.value"
data.df <- as.data.frame(data.mtx)
此代碼的一個很好的功能是,您可以一次分配原始數據框中的多個值,而不僅僅是一個"new.value"
,並且新值可以是隨機值。因此,您可以創建一個與原始大小相同的完整新隨機數據框。
使用dlpyr::mutate
和forcats::fct_recode
:
library(dplyr)
library(forcats)
iris <- iris %>%
mutate(Species = fct_recode(Species,
"Virginica" = "virginica",
"Versicolor" = "versicolor"
))
iris %>%
count(Species)
# A tibble: 3 x 2
Species n
<fctr> <int>
1 setosa 50
2 Versicolor 50
3 Virginica 50
您與例如'iris'只是工作。你能以其他方式複製你的問題嗎?目前很難理解你想要做什麼。 – Andrie 2012-08-04 17:34:13
適合我。你得到了哪個警告信息? – sgibb 2012-08-04 17:34:28
再次嘗試時,它與虹膜一起工作。然而,將其應用於我的數據集給出了這個:警告消息:在[[<。。factor>('* tmp *',x $ Hweet ==「hweet」,value = c(NA_integer_,: 無效因子水平,生成 – luciano 2012-08-04 17:42:56