【问题标题】:Remove specific missing values in r删除 r 中的特定缺失值
【发布时间】:2020-10-01 11:23:47
【问题描述】:

我的数据集缺少标记为“XXX”的值

我试过 na.omit(mydata)

df <- data.frame(X=factor(c(0.2, "XXX", 0.4, 0.1)), Y=factor(c(0.8, 1, 0.9, "XXX")))

这里 X 和 Y 是因子。我通过检查因子的水平发现丢失的数据被编码为“XXX”。

我想删除“2”行和“4”行。有人可以帮忙吗,我已经尝试了一段时间了。

【问题讨论】:

标签: r


【解决方案1】:

您无需将"XXX" 转换为NA。直接过滤"XXX"即可。

library(dplyr)

df %>% filter(across(everything(), ~ . != "XXX"))

#     X   Y
# 1 0.2 0.8
# 2 0.4 0.9

对应版本使用filter_all()

df %>% filter_all(all_vars(. != "XXX"))

基础 R 解决方案。

df[rowSums(df == "XXX") == 0, ]

【讨论】:

    【解决方案2】:

    另一个使用tidyverse的选项:

    df %>%
      mutate(across(everything(), str_replace, "XXX", NA_character_)) %>%
      drop_na()
    
    #     X   Y
    # 1 0.2 0.8
    # 2 0.4 0.9
    

    【讨论】:

      【解决方案3】:

      两个base R 解决方案:

      df <- subset(df, X != "XXX" & Y != "XXX")
      

      df <- df[df$X != "XXX" & df$Y != "XXX",]
      

      dplyr解决方案:

      library(dplyr)
      
      df <- df %>% filter(X != "XXX" & Y != "XXX")
      

      给我们:

          X   Y
      1 0.2 0.8
      3 0.4 0.9
      

      【讨论】:

        【解决方案4】:

        您还可以像这样过滤完整的案例:

        library(dplyr)
        library(magrittr)
        df %>% replace(.=="XXX", NA_character_) %>% filter(complete.cases(.))
        

        输出是:

        > df %>% replace(.=="XXX", NA_character_) %>% filter(complete.cases(.))
            X   Y
        1 0.2 0.8  
        2 0.4 0.9
        

        【讨论】:

        • library(magrittr) 不是必需的。
        • 示例中有管道。
        • dplyr 已经加载了管道函数。您可以尝试重新启动您的 R 会话 library(dplyr) 并再次运行您的代码,它无需 magrittr 即可工作。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-14
        • 1970-01-01
        • 2013-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-25
        相关资源
        最近更新 更多