R语言 使用Dplyr过滤包含特定字符串的行

R语言 使用Dplyr过滤包含特定字符串的行

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

使用的函数

用于执行这项任务的两个主要函数是。

  • filter() : dplyr包的filter函数将被用来根据条件过滤行。

语法 : filter(df , condition)

参数:

  • df: 数据框对象
  • condition: 用于过滤数据的条件

  • grepl(): grepl()函数将用于在向量中找到指定的字符串模式时返回TRUE,如果没有找到则返回FALSE。

语法 :grepl(pattern, string, ignore.case=FALSE)

参数:

  • pattern :正则表达式模式
  • string :要搜索的字符向量
  • ignore.case :在搜索中是否忽略大小写。这里ignore.case是一个可选的参数,默认设置为FALSE。

使用中的数据帧

马克 年龄 角色
20.1 21 软件工程师
30.2 22 软件开发
40.3 23 数据分析师
50.4 24 数据工程师
60.5 25 前端开发

筛选包含给定字符串的行

这里我们必须在 grepl() 函数中传递要搜索的字符串和要搜索的列,这个函数根据filter()函数打印的行来返回真或假。

语法: df %>% filter(grepl('Pattern', column_name))

参数

df: 数据框架对象

  • grepl(): 查找模式 字符串
  • “Pattern 要找到的模式(字符串)
  • column_name : 模式(字符串)将在这一列中被搜索到

例子

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))

输出

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

过滤不包含给定字符串的行

请注意,这段代码与上面的方法的唯一区别是,这里我们使用了一个 ‘!’not 操作符,这个操作符通过将TRUE转换为FALSE来反转 grepl() 函数提供的输出,反之亦然,这样的结果是只打印不包含模式的行, ,过滤掉包含模式的行。

语法 : df %>% filter(!grepl('Pattern', column_name))

参数 :

  • df : 数据框架对象
  • grepl (): 查找模式字符串
  • “Pattern 要找到的模式(字符串)
  • column_name : 模式(字符串)将在这一列中被搜索到

例子

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() 函数中传递多个pattern(string)时,用 OR ( ‘ | ‘)操作符将这些pattern分开。这将打印出所有包含指定模式的行。

语法:

df %>% filter(grepl( **' Patt.1 | Patt.2** ', column_name))

例子 :

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() 函数提供的输出,反之亦然,这样做的结果是只打印出不包含指定多重模式的行, ,过滤掉包含模式的行。

语法:

df %>% filter(!grepl('Patt.1 | Patt.2', column_name))

例子 :

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程