dplyr:使用**选择NA值过滤多个条件**

dplyr:使用**选择NA值过滤多个条件**,r,dplyr,data.table,conditional,na,R,Dplyr,Data.table,Conditional,Na,我知道关于过滤多个条件的所有问题,包括非常全面的答案,例如,甚至删除NA值 但我有一个不同的问题,我如何使用dplyr甚至数据进行过滤。table函数保留NA值和条件参数 作为下面的一个例子,我想保留Var3中的所有值,即>5加上NA值 library(data.table) library(dplyr) Var1<- seq(1:5) Var2<- c("s", "a", "d", NA, NA) Var3<- c(NA, NA, 2, 5, 2) Var4<

我知道关于
过滤多个条件的所有问题
,包括非常全面的答案,例如,甚至删除
NA值

但我有一个不同的问题,我如何使用
dplyr
甚至
数据进行
过滤
。table
函数保留
NA
值和
条件参数

作为下面的一个例子,我想保留
Var3
中的所有值,即
>5
加上
NA

library(data.table)
library(dplyr)

 Var1<- seq(1:5)
 Var2<- c("s", "a", "d", NA, NA)
 Var3<- c(NA, NA, 2, 5, 2) 
 Var4<- c(NA, 5, 1, 3,4)
 DT <- data.table(Var1,Var2,Var3, Var4) 
 DT
   Var1 Var2 Var3 Var4
1:    1    s   NA   NA
2:    2    a   NA    5
3:    3    d    2    1
4:    4   NA    5    3
5:    5   NA    2    4
我尝试过以下方法,但没有成功:

##Using dplyr::filter
 DT %>%  filter(!Var3 ==5)
  Var1 Var2 Var3 Var4
1    3    d    2    1
2    5 <NA>    2    4

# or

DT %>%  filter(Var3 <5 & is.na(Var3))
[1] Var1 Var2 Var3 Var4
<0 rows> (or 0-length row.names)

## using data.table 

 DT[DT[,.I[Var3 <5], Var1]$V1]
   Var1 Var2 Var3 Var4
1:   NA   NA   NA   NA
2:   NA   NA   NA   NA
3:    3    d    2    1
4:    5   NA    2    4
使用dplyr::filter DT%>%过滤器(!Var3==5) Var1 Var2 Var3 Var4 123D21 2 5 2 4 #或
DT%>%filter(Var3对于
data.table
,我们使用以下逻辑来筛选“Var3”小于5且不是NA(
!is.NA(Var3)
)或(
|
)的行(如果是NA)

DT[(Var3 < 5& !is.na(Var3)) | is.na(Var3)]
#   Var1 Var2 Var3 Var4
#1:    1    s   NA   NA
#2:    2    a   NA    5
#3:    3    d    2    1
#4:    5   NA    2    4
正如@ycw所提到的,
&!is.na(Var3)
并不是真正需要的,但是如果我们删除
is.na(Var3)
,它就变得很重要了

DT[, Var3 < 5 ]
#[1]    NA    NA  TRUE FALSE  TRUE

DT[, Var3 < 5  & !is.na(Var3)]
#[1] FALSE FALSE  TRUE FALSE  TRUE
DT[,Var3<5]
#[1] 不,不,真的,假的,真的
DT[,Var3<5&!is.na(Var3)]
#[1] 假假真假真

对于
数据.表
,我们使用以下逻辑来筛选“Var3”小于5且不是NA(
!is.NA(Var3)
)或(
|
)的行(如果是NA

DT[(Var3 < 5& !is.na(Var3)) | is.na(Var3)]
#   Var1 Var2 Var3 Var4
#1:    1    s   NA   NA
#2:    2    a   NA    5
#3:    3    d    2    1
#4:    5   NA    2    4
正如@ycw所提到的,
&!is.na(Var3)
并不是真正需要的,但是如果我们删除
is.na(Var3)
,它就变得很重要了

DT[, Var3 < 5 ]
#[1]    NA    NA  TRUE FALSE  TRUE

DT[, Var3 < 5  & !is.na(Var3)]
#[1] FALSE FALSE  TRUE FALSE  TRUE
DT[,Var3<5]
#[1] 不,不,真的,假的,真的
DT[,Var3<5&!is.na(Var3)]
#[1] 假假真假真

我认为这会起作用。使用
|
指示过滤器的
dt2
是预期输出

library(dplyr)

Var1 <- seq(1:5)
Var2 <- c("s", "a", "d", NA, NA)
Var3 <- c(NA, NA, 2, 5, 2) 
Var4 <- c(NA, 5, 1, 3, 4)

dt <- data_frame(Var1, Var2, Var3, Var4)

dt2 <- dt %>% filter(Var3 < 5 | is.na(Var3))
库(dplyr)

Var1我认为这会起作用。使用
|
指示过滤器的
dt2
是预期的输出

library(dplyr)

Var1 <- seq(1:5)
Var2 <- c("s", "a", "d", NA, NA)
Var3 <- c(NA, NA, 2, 5, 2) 
Var4 <- c(NA, 5, 1, 3, 4)

dt <- data_frame(Var1, Var2, Var3, Var4)

dt2 <- dt %>% filter(Var3 < 5 | is.na(Var3))
库(dplyr)

Var1是
Var3<5 |是.na(Var3)
Var3@ycw相同。我在处理nas时有点谨慎谢谢你的解释。在处理
NA
时谨慎确实是个好主意。如果你是第一行,我更喜欢看括号。我不知道如何计算
x&y | z
。is
Var3<5 | is.NA(Var3)
Var3@ycw相同。我在处理NAS时有点谨慎谢谢你的解释。在处理
NA
时谨慎确实是个好主意。如果你是第一行,我更喜欢看括号。我不知道如何计算
x&y | z