📜  使用 Dplyr 按 R 中的多个条件过滤数据

📅  最后修改于: 2022-05-13 01:55:30.180000             🧑  作者: Mango

使用 Dplyr 按 R 中的多个条件过滤数据

在本文中我们将学习如何使用 dplyr 包在 R 编程语言中通过多种条件过滤数据帧。

filter()函数用于生成数据框的子集,保留满足指定条件的所有行。 R 编程语言中的 filter() 方法可以应用于分组和未分组的数据。表达式包括运算符(==,>,> =),逻辑运算符(&,|!,XOR()),运算符范围(()之间,邻近())以及NA值检查针对列值.子集数据帧必须保留在单独的变量中。

方法一:直接使用filter()

为此,只需将要检查的条件传递给过滤器函数,该函数自动检查数据框并检索满足条件的行。

示例:使用 filter()函数过滤行的 R 程序

R
library(dplyr)
  
# sample data
df=data.frame(x=c(12,31,4,66,78),
              y=c(22.1,44.5,6.1,43.1,99),
              z=c(TRUE,TRUE,FALSE,TRUE,TRUE))
  
# condition
filter(df, x<50 & z==TRUE)


R
library(dplyr)
  
df=data.frame(x=c(12,31,4,66,78),
              y=c(22.1,44.5,6.1,43.1,99),
              z=c(TRUE,TRUE,FALSE,TRUE,TRUE))
  
df %>%
  filter(y < 45, z != FALSE)


R
library(dplyr)
  
df=data.frame(x=c(12,31,NA,NA,NA),
              y=c(22.1,44.5,6.1,10,99),
              z=c(TRUE,TRUE,FALSE,TRUE,TRUE))
  
df %>% filter(!is.na(x))


R
library(dplyr)
  
df=data.frame(x=c(12,31,10,2,99),
              y=c(22.1,44.5,6.1,10,99),
              z=c("Apple","Guava", "Mango", "Apple","Mango"))
  
df %>% 
 filter(z %in% c("Apple", "Mango"))


输出:

x    y    z
1 12 22.1 TRUE
2 31 44.5 TRUE

方法 2:在 filter() 中使用 %>%

这种方法被认为是一种 使用更清洁的方法 大量条件,因为使用 %>% 引用数据帧,然后通过 filter()函数应用条件。

示例:使用 %>% 过滤的 R 程序 

电阻

library(dplyr)
  
df=data.frame(x=c(12,31,4,66,78),
              y=c(22.1,44.5,6.1,43.1,99),
              z=c(TRUE,TRUE,FALSE,TRUE,TRUE))
  
df %>%
  filter(y < 45, z != FALSE)

输出:

x    y    z
1 12 22.1 TRUE
2 31 44.5 TRUE
3 66 43.1 TRUE

方法 3:将 NA 与 filter() 一起使用

is.na()函数接受的值,并且如果它是一个NA值,并返回FALSE,如果它不是一个NA值返回TRUE。

示例:使用 NA 过滤数据帧的 R 程序

电阻

library(dplyr)
  
df=data.frame(x=c(12,31,NA,NA,NA),
              y=c(22.1,44.5,6.1,10,99),
              z=c(TRUE,TRUE,FALSE,TRUE,TRUE))
  
df %>% filter(!is.na(x))

输出:

x    y    z
1 12 22.1 TRUE
2 31 44.5 TRUE

方法 4:使用 ' %in%' o运算符和 filter()

%in%运算符用于仅过滤掉包含向量中提供的数据的列。

示例:使用 %in% 过滤数据框的 R 程序 

电阻

library(dplyr)
  
df=data.frame(x=c(12,31,10,2,99),
              y=c(22.1,44.5,6.1,10,99),
              z=c("Apple","Guava", "Mango", "Apple","Mango"))
  
df %>% 
 filter(z %in% c("Apple", "Mango"))

输出:

x    y     z
1 12 22.1 Apple
2 10  6.1 Mango
3  2 10.0 Apple
4 99 99.0 Mango