r - 仅当一列包含特定值时,删除至少包含 NA 的行
问题描述
我有以下数据框:
a b c
x 1 1
x 1 NA
y NA 1
y 1 1
我想删除任何列中至少包含 NA 的行,但前提是“a”列包含“y”。因此,结果将是:
a b c
x 1 1
x 1 NA
y 1 1
到目前为止,我已经尝试过:
my_DF %>%
filter(!(any(is.na(.)) & a == "y"))
但生成的数据框如下:
a b c
x 1 1
x 1 NA
所以这只会删除“a”包含“y”的任何行,无论该行是否还包含至少一列中的 NA。
如何更改命令的“any(is.na(.))”部分(我猜这是错误的部分)以使其正常工作?
解决方案
您可以使用在dplyr 1.0.4 中if_any
引入并在函数中使用的新方法。以下代码将实现您所追求的结果:filter
my_DF %>%
filter(!(a == "y" & if_any(everything(), ~ is.na(.x))))
个别位的解释
filter
- 保留所有行
!
- 这不是真的
everything()
- 检查所有列(或者,您可以指定列名向量,例如c("b", "c")
)
if_any(everything(), ~ is.na(.x))
- 如果任何列有 NA(还有一个if_all
版本)
完全可重现的例子
my_DF <- data.frame(a = c("x", "x", "y", "y"),
b = c(1, 1, NA, 1),
c = c(1, NA, 1, 1))
my_DF %>%
filter(!(a == "y" & if_any(everything(), ~ is.na(.x))))
推荐阅读
- nginx - 如何使用 nginx 有条件地欺骗 HTTP 响应?
- javascript - xml 字符串到 xml 解析器:转换 html 字符代码
- sql - 从 SQL 结果中选择一系列结果
- c# - 如何修复 Entity Framework Core 中 X 类型错误的“无法确定导航 X 表示的关系”
- hex - RSA KEY 将十六进制转换为十进制
- javascript - 我应该避免嵌套函数吗?
- python - Pydantic:如何使用自定义属性名称解析 JSON
- javascript - 什么是快速了解 npm 子依赖项是否可升级的方法?
- javascript - 反应redux laravel api 419未知状态
- javascript - 我想用一个