Pergunta

Eu gostaria de escolher linhas com base nos subconjuntos de seus nomes, por exemplo

Se eu tiver os seguintes dados:

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

Como seleciono as linhas que correspondem 'Foo'?

Usar Grep () não funciona:

 grep('foo', data)

Retornos:

integer(0)

O que estou fazendo errado? Ou há um modo melhor?

Obrigado!

Foi útil?

Solução

Você precisa grep os nomes de propriedade dos dados, não a propriedade dos valores.

Para o seu exemplo, use

> grep("foo",names(data))
[1] 5 6 7
> data[grep("foo",names(data))]
  foo- foo1234-  123foo- 
  87       91       91 

Uma outra maneira limpa de fazer isso é usar quadros de dados.

> 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

Outras dicas

Use o subconjunto em combinação com expressões regulares:

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

Se você se preocupa com um conjunto de dados com uma coluna, acho que você não precisa especificar um nome de coluna ...

Philip

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

Se o valor for verdadeiro, ele retorna o conteúdo em vez do índice

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top