【问题标题】:how to remove a specific factor level to missing value in r?如何将特定因子水平删除为 r 中的缺失值?
【发布时间】:2021-08-28 03:51:25
【问题描述】:

我得到一个因子数据集df,如下所示:

df <- data.frame(attend = c("yes", "no", "no", "iap", "yes", "yes", "iap"),
           sex = c("male", "female", "female", "male", "female", "male", "female"))

df$attend <- as.factor(df$attend)
df$sex <- as.factor(df$sex)

df
attend sex
yes male
no female
no female
iap male
yes female
yes male
iap female

我只想从attend 变量中删除iap 级别。(我不想删除整行,我正在寻找的是删除级别iap,以便它成为变量attend下的缺失值)

我尝试使用以下代码将其删除,但出现错误提示: UseMethod("droplevels") 中的错误: 没有适用于“字符”类对象的“droplevels”方法。

df$attend <- droplevels(levels(df$attend)[4])

如果有人能提供帮助,不胜感激。

【问题讨论】:

    标签: r r-factor


    【解决方案1】:

    你可以更改变量的levels -

    levels(df$attend)[levels(df$attend) == 'iap'] <- NA
    df
    
    #  attend    sex
    #1    yes   male
    #2     no female
    #3     no female
    #4   <NA>   male
    #5    yes female
    #6    yes   male
    #7   <NA> female
    

    这也会自动将'iap' 删除为级别。

    levels(df$attend)
    #[1] "no"  "yes"
    

    这里我们也可以使用forcats::fct_recode将具体值转为NA

    df$attend <- forcats::fct_recode(df$attend, NULL = 'iap')
    

    【讨论】:

      【解决方案2】:

      另一个基本 R 解决方案是使用 exclude:

      df$attend <- factor(df$attend, exclude = "iap")
      
        attend    sex
      1    yes   male
      2     no female
      3     no female
      4   <NA>   male
      5    yes female
      6    yes   male
      7   <NA> female
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-19
        • 2022-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-01
        • 1970-01-01
        相关资源
        最近更新 更多