R 中 grep() 和 grepl() 的比较:有什么区别?
人们在 R 中经常混淆的两个函数是grep()和grepl() 。这两个函数都允许您查看字符串中是否存在某种模式,但它们返回不同的结果:
- 当字符串中存在模式时, grepl()返回 TRUE。
- grep()返回包含模式的字符串索引向量。
以下示例说明了这种差异:
#create a vector of data data <- c('P Guard', 'S Guard', 'S Forward', 'P Forward', 'Center') grep ('Guard', data) [1] 1 2 grepl ('Guard', data) [1] TRUE TRUE FALSE FALSE FALSE
以下示例显示了您何时可能想要使用其中一个函数而不是另一个函数。
何时使用 grep()
1. 过滤包含某个字符串的行
grepl()最常见的用途之一是过滤数据框中包含特定字符串的行:
library(dplyr) #create data frame df <- data.frame(player = c('P Guard', 'S Guard', 'S Forward', 'P Forward', 'Center'), points = c(12, 15, 19, 22, 32), rebounds = c(5, 7, 7, 12, 11)) #filter rows that contain the string 'Guard' in the player column df %>% filter( grepl ('Guard', player)) player points rebounds 1 P Guard 12 5 2 S Guard 15 7
何时使用 grep()
1. 选择包含特定字符串的列
您可以使用grep()选择数据框中包含特定字符串的列:
library(dplyr) #create data frame df <- data.frame(player = c('P Guard', 'S Guard', 'S Forward', 'P Forward', 'Center'), points = c(12, 15, 19, 22, 32), rebounds = c(5, 7, 7, 12, 11)) #select columns that contain the string 'p' in their name df %>% select( grep ('p', colnames(df))) player points 1 P Guard 12 2 S Guard 15 3S Forward 19 4P Forward 22 5 Center 32
2. 统计包含某个字符串的行数
您可以使用grep()来计算数据框中包含特定字符串的行数:
#create data frame df <- data.frame(player = c('P Guard', 'S Guard', 'S Forward', 'P Forward', 'Center'), points = c(12, 15, 19, 22, 32), rebounds = c(5, 7, 7, 12, 11)) #count how many rows contain the string 'Guard' in the player column length( grep ('Guard', df$player)) [1] 2
您可以在此处找到更多 R 教程。