как я grep в R? - PullRequest
       54

как я grep в R?

24 голосов
/ 19 ноября 2010

Я хотел бы выбрать строки на основе подмножеств их имен, например

Если у меня есть следующие данные:

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 голосов
/ 19 ноября 2010

Вам необходимо выполнить grep для свойства 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 голосов
/ 19 ноября 2010

Используйте подмножество в сочетании с регулярными выражениями:

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

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

Philip

2 голосов
/ 26 сентября 2015
> grep("foo",names(data), value=T)
[1] "foo-"     "foo1234-" "123foo-" 

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

...