从因子变量中删除特定因子水平

use*_*499 6 r levels dataframe

我有一个数据框,有几个变量有5个因子级别.我想只删除其中一个级别.首先,我将该级别的所有实例分配给NA,然后使用该droplevels命令消除空白级别.

但是对于我的数据框中的一个变量,我不想丢弃的其中一个级别没有任何观察结果.有没有办法只删除一个特定的因子级别,而不仅仅是空的.

这是一个可重复的例子

df <- data.frame(var1=rep(letters[1:5],2),var2=rep(letters[5:1],2),var3=c("a","c","d","e","a","c","d","e","a","c"))
levels(df$var3)<-c("a","c","d","e","b")
Run Code Online (Sandbox Code Playgroud)

这会像我一样设置一个数据框.现在我想删除级别e的所有实例,然后将其作为可能的级别删除.我使用下面的代码执行此操作.

df2<-replace(df, df=="e",NA)
df2<-droplevels(df2)
Run Code Online (Sandbox Code Playgroud)

问题是当我使用droplevels它时也从var3中降低了b级.我不想从所有变量中删除级别b只是级别e.我已经找到了一种方法来删除一个特定的级别,但还没有找到答案.任何人都可以告诉我如何删除一个特定的因子水平?我理想的是一个droplevels命令,我只能删除级别e.这样的功能存在吗?

Bro*_*ieG 7

str(
  as.data.frame(
    lapply(
      df2, 
      function(x) factor(as.character(x), levels=levels(x)[levels(x) != "e"])
) ) )
# 'data.frame':  10 obs. of  3 variables:
# $ var1: Factor w/ 4 levels "a","b","c","d": 1 2 3 4 NA 1 2 3 4 NA
# $ var2: Factor w/ 4 levels "a","b","c","d": NA 4 3 2 1 NA 4 3 2 1
# $ var3: Factor w/ 4 levels "a","c","d","b": 1 2 3 NA 1 2 3 NA 1 2
Run Code Online (Sandbox Code Playgroud)