【发布时间】:2023-01-17 21:41:56
【问题描述】:
问题很简单,但我想知道是否有一种优雅的方法可以实现这个目标。我想过滤任何变量中具有 NA 值但任意变量的所有行。
是这样的:
data %>% filter(complete.cases(-var1))
有人知道使用dplyr 的答案吗?我可以列出所有这些,但在一个有很多变量的数据集中,这是不可能的……
谢谢!
【问题讨论】:
问题很简单,但我想知道是否有一种优雅的方法可以实现这个目标。我想过滤任何变量中具有 NA 值但任意变量的所有行。
是这样的:
data %>% filter(complete.cases(-var1))
有人知道使用dplyr 的答案吗?我可以列出所有这些,但在一个有很多变量的数据集中,这是不可能的……
谢谢!
【问题讨论】:
你可以做
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
【讨论】: