MGJ*_*123 4 r filter dataframe dplyr
这是一个示例数据集:
id <- c("Item1","Item2","Item3","Item4","Item5","Item6")
var1 <- c(2,3,NA,NA,5,6)
var2 <- c(NA,3,5,NA,5,NA)
var3 <- c(NA,3,4,NA,NA,6)
test <- data.frame(id, var1, var2, var3)
Run Code Online (Sandbox Code Playgroud)
我想过滤掉 var1、var2 和 var3 都是 na 的地方。我知道可以这样做:
test1 <- test %>% filter(!(is.na(var1) & is.na(var2) & is.na(var3)))
test1
id var1 var2 var3
1 Item1 2 NA NA
2 Item2 3 3 3
3 Item3 NA 5 4
4 Item5 5 5 NA
5 Item6 6 NA 6
Run Code Online (Sandbox Code Playgroud)
有更好的方法吗?
如果过滤集中在某些列,例如var1:var3,您可以使用
library(dplyr)
Run Code Online (Sandbox Code Playgroud)
test %>%
filter(rowSums(across(var1:var3, ~ !is.na(.))) > 0)
Run Code Online (Sandbox Code Playgroud)
test %>%
filter_at(vars(var1:var3), any_vars(!is.na(.)))
Run Code Online (Sandbox Code Playgroud)
test %>%
rowwise() %>%
filter(sum(!is.na(c_across(var1:var3))) > 0) %>%
ungroup()
Run Code Online (Sandbox Code Playgroud)
# # A tibble: 5 x 4
# id var1 var2 var3
# <chr> <dbl> <dbl> <dbl>
# 1 Item1 2 NA NA
# 2 Item2 3 3 3
# 3 Item3 NA 5 4
# 4 Item5 5 5 NA
# 5 Item6 6 NA 6
Run Code Online (Sandbox Code Playgroud)