Pergunta

Eu tenho um quadro de dados com cerca de 40 colunas, a segunda coluna, os dados [2] contêm o nome da empresa que o restante dos dados da linha descreve. No entanto, os nomes das empresas são diferentes, dependendo do ano (perdendo 09 para os dados de 2009, nada para 2010).

Eu gostaria de poder subconjuntar os dados para que eu possa puxar nos dois anos ao mesmo tempo. Aqui está um exemplo do que estou tentando fazer ...

subset(data, data[2] == "Company Name 09" | "Company Name", drop = T) 

Essencialmente, estou tendo dificuldade em usar o operador ou na função do subconjunto.

No entanto, tentei outras alternativas:

subset(data, data[[2]] == grep("Company Name", data[[2]]))

Talvez exista uma maneira mais fácil de fazer isso usando uma função de string?

Quaisquer pensamentos seriam apreciados.

Foi útil?

Solução

Primeiro de tudo (como Jonathan fez em seu comentário) para referenciar a segunda coluna, você deve usar qualquer data[[2]] ou data[,2]. Mas se você estiver usando o subconjunto, poderá usar o nome da coluna: subset(data, CompanyName == ...).

E para sua pergunta, eu farei um de:

subset(data, data[[2]] %in% c("Company Name 09", "Company Name"), drop = TRUE) 
subset(data, grepl("^Company Name", data[[2]]), drop = TRUE)

Em segundo eu uso grepl (introduzido com r versão 2.9) que retornam o vetor lógico com TRUE para partida.

Outras dicas

Um par de coisas:

1) Dados de maquete são úteis, pois não sabemos exatamente o que você está enfrentando. Forneça dados, se possível. Talvez eu tenha entendido mal o que se segue?

2) Não use [[2]] Para indexar seus dados.Frame, acho que [, "Colname"] é muito mais claro

3) Se a única diferença for um '09' no nome, basta regexp isso:

R> x1 <- c("foo 09", "bar", "bar 09", "foo")
R> x2 <- gsub(" 09$", "", x1)
[1] "foo" "bar" "bar" "foo"
R> 

Agora você deve ser capaz de fazer seu subconjunto nos dados transformados em voo:

R> data <- data.frame(value=1:4, name=x1)
R> subset(data, gsub(" 09$", "", name)=="foo")
  value   name
1     1 foo 09
4     4    foo
R> 

Você também pode substituir a coluna de nome pelo valor regexp'ed.

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