2010-11-18 19 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,則返回內容而不是索引