【问题标题】:how to filter complete cases in all variables but one?如何过滤除一个变量以外的所有变量中的完整案例?
【发布时间】:2023-01-17 21:41:56
【问题描述】:

问题很简单,但我想知道是否有一种优雅的方法可以实现这个目标。我想过滤任何变量中具有 NA 值但任意变量的所有行。

是这样的:

data %>% filter(complete.cases(-var1))

有人知道使用dplyr 的答案吗?我可以列出所有这些,但在一个有很多变量的数据集中,这是不可能的……

谢谢!

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    你可以做

    data %>% filter(complete.cases(select(., -var1)))
    

    正如这个代表所展示的那样,哪个完成了工作。

    首先,创建一个虚拟数据集,其中整个第一列是NA

    library(dplyr)
    
    data <- setNames(iris[1:10,], paste0('var', 1:5))
    data$var1 <- NA
    
    data
    #>    var1 var2 var3 var4   var5
    #> 1    NA  3.5  1.4  0.2 setosa
    #> 2    NA  3.0  1.4  0.2 setosa
    #> 3    NA  3.2  1.3  0.2 setosa
    #> 4    NA  3.1  1.5  0.2 setosa
    #> 5    NA  3.6  1.4  0.2 setosa
    #> 6    NA  3.9  1.7  0.4 setosa
    #> 7    NA  3.4  1.4  0.3 setosa
    #> 8    NA  3.4  1.5  0.2 setosa
    #> 9    NA  2.9  1.4  0.2 setosa
    #> 10   NA  3.1  1.5  0.1 setosa
    

    请注意,通过 complete.cases 过滤此返回一个空数据框:

    data %>% filter(complete.cases(.))
    #> [1] var1 var2 var3 var4 var5
    #> <0 rows> (or 0-length row.names)
    

    但是我们可以像这样从complete.cases中排除var1

    data %>% filter(complete.cases(select(., -var1)))
    #>    var1 var2 var3 var4   var5
    #> 1    NA  3.5  1.4  0.2 setosa
    #> 2    NA  3.0  1.4  0.2 setosa
    #> 3    NA  3.2  1.3  0.2 setosa
    #> 4    NA  3.1  1.5  0.2 setosa
    #> 5    NA  3.6  1.4  0.2 setosa
    #> 6    NA  3.9  1.7  0.4 setosa
    #> 7    NA  3.4  1.4  0.3 setosa
    #> 8    NA  3.4  1.5  0.2 setosa
    #> 9    NA  2.9  1.4  0.2 setosa
    #> 10   NA  3.1  1.5  0.1 setosa
    

    创建于 2023-01-17 reprex v2.0.2

    【讨论】:

      猜你喜欢
      • 2018-09-02
      • 1970-01-01
      • 1970-01-01
      • 2020-05-25
      • 2018-12-09
      • 1970-01-01
      • 2022-07-21
      • 1970-01-01
      • 2017-02-23
      相关资源
      最近更新 更多