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

相关:如何使用 dplyr 过滤包含特定字符串的行

何时使用 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 教程。

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注