现在位置: 首页 > R 教程 > 正文

R grep() 函数 - 模式匹配与搜索

R 语言实例 R 语言实例

R grep() 函数用于在字符串向量中搜索匹配指定模式的位置或值。

grepl() 是其逻辑版本,返回 TRUE/FALSE。两者都支持正则表达式。

grep() 函数语法格式如下:

grep(pattern, x, value = FALSE, ignore.case = FALSE)
grepl(pattern, x, ignore.case = FALSE)

参数说明:

  • pattern 要匹配的模式(支持正则表达式)。

  • x 输入字符串向量。

  • value 是否返回匹配的值(TRUE),而不仅仅是索引(FALSE)。默认为 FALSE。

  • ignore.case 是否忽略大小写。

实例

fruits <- c("apple", "banana", "orange", "grape", "pineapple", "mango")

# grep: 返回包含 "ap" 的索引
print("包含 'ap' 的索引:")
print(grep("ap", fruits))

# grep with value: 返回匹配的值
print("包含 'ap' 的水果:")
print(grep("ap", fruits, value = TRUE))

# grepl: 返回逻辑向量
print("是否包含 'ap':")
print(grepl("ap", fruits))

执行以上代码输出结果为:

[1] "包含 'ap' 的索引:"
[1] 1 4 5
[1] "包含 'ap' 的水果:"
[1] "apple"     "grape"     "pineapple"
[1] "是否包含 'ap':"
[1]  TRUE FALSE FALSE  TRUE  TRUE FALSE

grepl() 配合逻辑索引可以筛选数据框中的行:

实例

# 包含邮箱的用户数据
df <- data.frame(
  姓名 = c("张三", "李四", "王五", "赵六"),
  邮箱 = c("zhang@runoob.com", "li@gmail.com",
           "wang@runoob.com", "zhao@yahoo.com"),
  stringsAsFactors = FALSE
)

# 筛选 runoob 邮箱的用户
runoob_users <- df[grepl("runoob", df$邮箱), ]
print("runoob 邮箱的用户:")
print(runoob_users)

执行以上代码输出结果为:

[1] "runoob 邮箱的用户:"
  姓名              邮箱
1 张三 zhang@runoob.com
3 王五  wang@runoob.com

R 语言实例 R 语言实例