如何在R中使用grep?

24

我希望根据名称的子集来选择行,例如:

假设我有以下数据:

data <- structure(c(91, 92, 108, 104, 87, 91, 91, 97, 81, 98), 
.Names = c("fee-", "fi", "fo-", "fum-", "foo-", "foo1234-", "123foo-", 
"fum-", "fum-", "fum-"))

如何选择匹配 'foo' 的行?

使用 grep() 不起作用:

 grep('foo', data)

返回:

integer(0)

我做错了什么?或者说,有更好的方法吗?

谢谢!

3个回答

27
你需要搜索data对象的names属性,而不是values属性。
对于你的示例,请使用:
> grep("foo",names(data))
[1] 5 6 7
> data[grep("foo",names(data))]
  foo- foo1234-  123foo- 
  87       91       91 

另一种干净的方法是使用数据框架。

> data <- data.frame(values=c(91, 92, 108, 104, 87, 91, 91, 97, 81, 98), 
                   names = c("fee-", "fi", "fo-", "fum-", "foo-", "foo1234-", "123foo-", 
                   "fum-", "fum-", "fum-"))

> data$values[grep("foo",data$names)]
[1] 87 91 91

6

结合正则表达式使用subset:

subset(your_data, regexpr("foo", your_data$your_column_to_match) > 0))

如果你只关心一个列的数据集,我想你不需要指定列名...
菲利普

6
我通常觉得在这里使用grepl更有用--您可以跳过与0进行比较的步骤,这样代码看起来会更干净一些。 - Harlan

2
> grep("foo",names(data), value=T)
[1] "foo-"     "foo1234-" "123foo-" 

如果值为true,则返回内容而不是索引。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接