r - 基于字符串列表的子集使用 grepl()?

标签 r parsing grepl

我正在做一些看似非常简单的事情。我想使用 grepl() 命令——或类似的命令——在几个不同的短语上对 R 中的数据帧进行子集化,而不构建循环。

例如,我想提取名为 Bob 或 Mary 的任何人的所有行:

## example data frame:
tmp = structure(list(Name = structure(c(6L, 8L, 9L, 7L, 2L, 3L, 10L, 
1L, 5L, 4L), .Label = c("Alan", "Bob", "bob smith", "Frank", 
"John", "Mary Anne", "mary jane", "Mary Smith", "Potter, Mary", 
"smith, BOB"), class = "factor"), Age = c(31L, 23L, 23L, 55L, 
32L, 36L, 45L, 12L, 43L, 46L), Height = 1:10), .Names = c("Name", 
"Age", "Height"), class = "data.frame", row.names = c(NA, -10L
))

tmp

#           Name Age Height
#1     Mary Anne  31      1
#2    Mary Smith  23      2
#3  Potter, Mary  23      3
#4     mary jane  55      4
#5           Bob  32      5
#6     bob smith  36      6
#7    smith, BOB  45      7
#8          Alan  12      8
#9          John  43      9
#10        Frank  46     10

## this doesn't work
mynames=c('bob','mary')
tmp[grepl(mynames,tmp$Name,ignore.case=T),]

任何想法都会有所帮助!

最佳答案

您可以结合您的 mynames带有正则表达式运算符的向量 |并使用 grep .

tmp[grep(paste(mynames, collapse='|'), tmp$Name, ignore.case=TRUE),]

#           Name Age Height
# 1    Mary Anne  31      1
# 2   Mary Smith  23      2
# 3 Potter, Mary  23      3
# 4    mary jane  55      4
# 5          Bob  32      5
# 6    bob smith  36      6
# 7   smith, BOB  45      7

关于r - 基于字符串列表的子集使用 grepl()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14487877/

相关文章:

linux - 如何在 Xming View 中保存使用 putty(linux 服务器)生成的 R 图像?

python - Beautifulsoup HTML表格解析——只能获取到最后一行?

r - GAM 中的权重选项

java - 使用 Java 在 Windows 中读取 UTF-8 格式的 xml 文件会出现 "IOException: Invalid byte 2 of 2-byte UTF-8 sequence."错误

python - python 中的 XML 解析 : expaterror not well-formed

r - 使用 R 和术语文档矩阵创建频率表

R,将 dplyr::mutate 与包含 grepl() 的 ifelse 一起使用会产生意外结果

mysql - 在 MySQL 中运行 dplyr、grepl

r - 使用 NEAR 正则表达式搜索文本

r - 如何用最近两个值的平均值替换 NA