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