我需要替换数据框中因子列的级别。以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