R 根据二进制文件删除行&;NA状态

R 根据二进制文件删除行&;NA状态,r,if-statement,na,R,If Statement,Na,假设数据集DF中有三列:A、B和C A是二进制的,而B和C是序数的 有时B和C是NA,有时在同一行,有时不是 现在,我想要的是在A=0的条件下删除B或C为NA的行。如果A=1,那么B或C是否为NA并不重要 最简单/最直接的方法是什么 我尝试了if-else,但是因为B和C有NA值,我得到了警告,它不是真/假。一个简单的基R解决方案是 DF[DF$A == 1 | (DF$A != 1 & !is.na(DF$B)) | (DF$A != 1 & !is.na(DF$C)), ]

假设数据集DF中有三列:A、B和C

A是二进制的,而B和C是序数的

有时B和C是NA,有时在同一行,有时不是

现在,我想要的是在A=0的条件下删除B或C为NA的行。如果A=1,那么B或C是否为NA并不重要

最简单/最直接的方法是什么


我尝试了if-else,但是因为B和C有NA值,我得到了警告,它不是真/假。

一个简单的基R解决方案是

DF[DF$A == 1 | (DF$A != 1 & !is.na(DF$B)) | (DF$A != 1 & !is.na(DF$C)), ]


下面是一个使用
tidyverse
的示例,特别是
dplyr::filter
。构造正确的条件集很容易,我们希望在
A==1或两者都
的位置保留行!is.na(B)
!is.na(C)
。我还通过
A
排列
,这样您就可以看到
NA
行中
A==0

库(tidyverse)
种子集(100)
待定%
过滤器((A==1)|(!is.na(B)&is.na(C))%>%
安排(A)
#>A、B、C
#> 1  0  2  3
#> 2  0  2  4
#> 3  0  1  4
#> 4  0  1  3
#> 5  0  2  3
#> 6  0  1  3
#> 7  0  2  3
#>812NA
#>9.1纳纳纳
#> 10 1  2  3
#> 11 1  2  3
#>12 1 NA 3
#>13 1 NA 4
#>14 1 NA 3
#> 15 1  1  3

由(v0.2.0)于2018年5月10日创建。

如果您给出一个显示典型输入和所需输出的示例,则会更容易。谢谢,但我收到警告:没有适用于“函数”类对象的“过滤器”方法。这是一个可复制的示例。尝试精确复制和粘贴,并在干净的R会话中运行。
DF[ifelse(DF$A == 0, !is.na(DF$B) & !is.na(DF$C), TRUE), ]