在 R 中使用 Dplyr 过滤包含某个字符串的行
在本文中,我们将学习如何使用 R 编程语言中的 dplyr 包过滤包含特定字符串的行。
使用的功能
将用于执行此任务的两个主要功能是:
- filter() : dplyr 包的过滤器函数将用于根据条件过滤行
Syntax: filter(df , condition)
Parameter :
- df: The data frame object
- condition: The condition to filter the data upon
- grepl() :如果在向量中找到指定的字符串模式,grepl()函数将用于返回值 TRUE,如果未找到则返回 FALSE。
Syntax: grepl(pattern, string, ignore.case=FALSE)
Parameters:
- pattern: regular expressions pattern
- string: character vector to be searched
- ignore.case: whether to ignore case in the search. Here ignore.case is an optional parameter as is set to FALSE by default.
使用中的数据框:
marks | age | roles |
---|---|---|
20.1 | 21 | Software Eng. |
30.2 | 22 | Software Dev |
40.3 | 23 | Data Analyst |
50.4 | 24 | Data Eng. |
60.5 | 25 | FrontEnd Dev |
过滤包含给定字符串的行
这里我们要传递grepl()函数要搜索的字符串和要搜索的列,这个函数根据哪个filter()函数打印行返回true或false。
Syntax: df %>% filter(grepl(‘Pattern’, column_name))
Parameters:
df: Dataframe object
- grepl(): finds the pattern String
- “Pattern”: pattern(string) to be found
- column_name: pattern(string) will be searched in this column
例子:
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()函数提供的输出,反之亦然,结果仅打印不包含模式的行和 过滤掉包含模式的行。
Syntax: df %>% filter(!grepl(‘Pattern’, column_name))
Parameters:
- df: Dataframe object
- grepl(): finds the pattern String
- “Pattern“: pattern(string) to be found
- column_name: pattern(string) will be searched in this column
例子:
电阻
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 (' | ')运算符分隔。这将打印包含指定模式的所有行。
语法:
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