r - 如何过滤掉特定列都在哪里
问题描述
这是一个示例数据集:
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)
我想过滤掉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
有没有更好的方法来做到这一点?
解决方案
如果过滤集中在某些列上,例如var1:var3
,您可以使用
library(dplyr)
选项1
test %>%
filter(rowSums(across(var1:var3, ~ !is.na(.))) > 0)
选项 2
test %>%
filter_at(vars(var1:var3), any_vars(!is.na(.)))
选项 3
test %>%
rowwise() %>%
filter(sum(!is.na(c_across(var1:var3))) > 0) %>%
ungroup()
输出
# # 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
推荐阅读
- c++ - 二分查找的实现
- c - 尝试连接节点时出现分段错误
- multithreading - 有没有办法监控resilience4j线程池?
- c# - 使用 ItAny 验证的起订量与预期不匹配
- excel - 数据透视表、切片器、缓存
- c# - 为什么可以为空
不会重载 == 运算符? - swift - 使用 Apple 的 Swift 创建和使用 Windows DLL
- swift - SwiftUI - Mapkit - 绑定 mapkit 并在注释标注按钮上显示视图
- php - DOMPDF 不在生产服务器上生成 PDF,只显示代码
- .net-core - 如何修复“不知道这样的主机” - 在 System.Net.Http.ConnectHelper.ConnectAsync