Как мне 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)
что я делаю неправильно? или, есть ли лучший способ?
Спасибо!
Ответы
Ответ 1
Вам нужно сгладить свойство имен данных, а не свойство 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
Ответ 2
Используйте подмножество в сочетании с регулярными выражениями:
subset(your_data, regexpr("foo", your_data$your_column_to_match) > 0))
Если вам просто нужен набор данных с одним столбцом, я думаю, вам не нужно указывать имя столбца...
Филипп
Ответ 3
> grep("foo",names(data), value=T)
[1] "foo-" "foo1234-" "123foo-"
Если значение истинно, оно возвращает содержимое вместо индекса