R是否有通配符表达式(例如星号(*))?

时间:2011-11-17 21:29:04

标签: r

我希望我不会错过任何明显的东西,但这是我的问题:

给出这样的数据

Data1=
Name       Number
AndyBullxxx    12
AlexPullxcx    14
AndyPamxvb     56
RickRalldfg    34
AndyPantert    45
SamSaltedf     45

我希望能够提取所有以“Andy”开头的行

subset(Data1,Name=="Andy*")

AndyBullxxx  12
AndyPamxvb   56
AndyPantert  45

所以基本上是一个外卡符号,它允许我将所有以特定字符开头的行分组。

3 个答案:

答案 0 :(得分:18)

尝试,

df[grep("^Andy",rownames(df)),]

grep的第一个参数是一个模式,一个正则表达式。 grep返回包含第一个参数中给出的模式的行。 ^表示以。开头。

让我们重现这个:

 df <- data.frame(x=c(12,14,56,34,45,45))
 rownames(df) <- c("AndyBullxxx", "AlexPullxcx","AndyPamxvb", "RickRalldfg","AndyPantert","SamSaltedf")
 ## see what grep does
 grep("^Andy",rownames(df))

答案 1 :(得分:9)

如果您对regex感到不舒服,utils包中有一个函数可以将基于通配符的表达式转换为正则表达式。所以你可以做到

df[grepl(glob2rx('Andy*'), rownames(df)),]

答案 2 :(得分:3)

我想你想要一个正则表达式:

subset(Data1, grepl("^\bAndy", Name))

Data1[grepl("^\bAndy", Data1$Name),]

在正则表达式中,“^”代表startswith,而\ b代表下一组字符将成为一个单词。正则表达式是一种强大的文本处理工具,需要进行一些研究网上有很多教程和网站。我使用的其中一个是:

http://www.regular-expressions.info/

我现在不能使用R(我的妻子笔记本电脑;)),因此这些代码片段未经测试。也许下次为我们提供一个示例数据集,这使得提供一个工作示例变得非常容易。