📜  在 R 中使用 Dplyr 过滤包含某个字符串的行

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

在 R 中使用 Dplyr 过滤包含某个字符串的行

在本文中,我们将学习如何使用 R 编程语言中的 dplyr 包过滤包含特定字符串的行。

使用的功能

将用于执行此任务的两个主要功能是:

  • filter() : dplyr 包的过滤器函数将用于根据条件过滤行
  • grepl() 如果在向量中找到指定的字符串模式,grepl()函数将用于返回值 TRUE,如果未找到则返回 FALSE。

使用中的数据框:

 marks ageroles
20.121Software Eng.
30.222Software Dev
40.323Data Analyst
 50.424 Data Eng.
60.525FrontEnd Dev

过滤包含给定字符串的行

这里我们要传递grepl()函数要搜索的字符串和要搜索的列,这个函数根据哪个filter()函数打印行返回true或false。

例子:

R
library(dplyr)
df <- data.frame( marks = c(20.1, 30.2, 40.3, 50.4, 60.5),
                   
                 age = c(21:25),
  
                 roles = c('Software Eng.', 'Software Dev', 
                           'Data Analyst', 'Data Eng.', 
                           'FrontEnd Dev'))
  
df %>% filter(grepl('Dev', roles))


R
library(dplyr)
  
df <- data.frame( marks = c(20.1, 30.2, 40.3, 50.4, 60.5),
                   
                 age = c(21:25),
  
                 roles = c('Software Eng.', 'Software Dev',
                           'Data Analyst', 'Data Eng.',
                           'FrontEnd Dev'))
  
df %>% filter(!grepl('Eng.', roles))


R
library(dplyr)
  
df <- data.frame( marks = c(20.1, 30.2, 40.3, 50.4, 60.5),
                   
                 age = c(21:25),
  
                 roles = c('Software Eng.', 'Software Dev', 
                           'Data Analyst', 'Data Eng.',
                           'FrontEnd Dev'))
  
df %>% filter(grepl('Dev|Eng.', roles))


R
library(dplyr)
  
df <- data.frame( marks = c(20.1, 30.2, 40.3, 50.4, 60.5),
                   
                 age = c(21:25),
  
                 roles = c('Software Eng.', 'Software Dev', 
                           'Data Analyst', 'Data Eng.',
                           'FrontEnd Dev'))
  
df %>% filter(!grepl('Data|Front', roles))


输出:



marks age        roles
1  30.2  22 Software Dev
2  60.5  25 FrontEnd Dev

过滤不包含给定字符串

请注意,此代码与上述方法的唯一区别是我们在这里使用了 ' ! ' not 运算符,此运算符通过将 TRUE 转换为 FALSE 来反转grepl()函数提供的输出,反之亦然,结果仅打印不包含模式的行和 过滤掉包含模式的行。

例子:

电阻

library(dplyr)
  
df <- data.frame( marks = c(20.1, 30.2, 40.3, 50.4, 60.5),
                   
                 age = c(21:25),
  
                 roles = c('Software Eng.', 'Software Dev',
                           'Data Analyst', 'Data Eng.',
                           'FrontEnd Dev'))
  
df %>% filter(!grepl('Eng.', roles))

输出:

marks age        roles
1  30.2  22 Software Dev
2  40.3  23 Data Analyst
3  60.5  25 FrontEnd Dev

过滤包含多个模式的行(字符串)

此代码也与上述方法类似,唯一的区别是在grepl()函数传递多个模式(字符串)时,模式用OR (' | ')运算符分隔。这将打印包含指定模式的所有行。

语法

示例



电阻

library(dplyr)
  
df <- data.frame( marks = c(20.1, 30.2, 40.3, 50.4, 60.5),
                   
                 age = c(21:25),
  
                 roles = c('Software Eng.', 'Software Dev', 
                           'Data Analyst', 'Data Eng.',
                           'FrontEnd Dev'))
  
df %>% filter(grepl('Dev|Eng.', roles))

输出:

marks age         roles
1  20.1  21 Software Eng.
2  30.2  22  Software Dev
3  50.4  24     Data Eng.
4  60.5  25  FrontEnd Dev

过滤不包含多个模式的行(字符串)

这段代码与上面的方法类似,唯一的区别是我们使用的是 ' ! ' not 运算符,此运算符通过将 TRUE 转换为 FALSE 来反转grepl()函数提供的输出,反之亦然,结果仅打印不包含指定多个模式的行,并且 过滤掉包含模式的行。

语法

示例

电阻

library(dplyr)
  
df <- data.frame( marks = c(20.1, 30.2, 40.3, 50.4, 60.5),
                   
                 age = c(21:25),
  
                 roles = c('Software Eng.', 'Software Dev', 
                           'Data Analyst', 'Data Eng.',
                           'FrontEnd Dev'))
  
df %>% filter(!grepl('Data|Front', roles))

输出:

marks age         roles
1  20.1  21 Software Eng.
2  30.2  22  Software Dev