2010-11-18 5 views
24

Я хотел бы выбирать строки на основе подмножеств их имен, напримеркак мне grep в 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-")) 

Как выбрать строки, соответствующие «Foo»?

с помощью 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)) 

Если вы просто заботитесь о наборе данных с одного столбца, я думаю, вам не нужно указать имя столбца ...

Philip

+6

Я обычно нахожу здесь 'grepl', поэтому вы можете пропустить сравнение против 0, что делает код немного чище. – Harlan

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

Если значение истинно, оно возвращает содержимое вместо индекса

Смежные вопросы