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