2010-11-18 41 views
24

我想选择基于其名称的子集行,例如我如何gre在R?

如果我有以下数据:

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-")) 

如何选择匹配的“富”的行?

用grep()不工作:

grep('foo', data) 

回报:

integer(0) 

我究竟做错了什么?或者,还有更好的方法?

谢谢!

回答

27

您需要grep数据的名称属性,而不是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(your_data, regexpr("foo", your_data$your_column_to_match) > 0)) 

如果你只关心有一列的数据集我猜你不需要指定列名...

菲利普

+6

我通常会发现'grepl'在这里更有用 - 您可以跳过比较vs 0的事情,这会使代码看起来更清晰一些。 – Harlan 2010-11-19 20:07:45

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

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