Question

I ai une trame de données avec environ 40 colonnes, la deuxième colonne, les données [2] contient le nom de l'entreprise que le reste des données de ligne décrit. Cependant, les noms des sociétés sont différentes en fonction de l'année (09 pour les données de suivi 2009, rien pour 2010).

Je voudrais être en mesure de sous-ensemble des données telles que je peux tirer dans les deux années à la fois. Voici un exemple de ce que je suis en train de faire ...

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

Pour l'essentiel, je vais avoir des difficultés à utiliser l'opérateur OR dans la fonction de sous-ensemble.

Cependant, j'ai essayé d'autres alternatives:

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

Peut-être il y a un moyen plus facile de le faire en utilisant une fonction de chaîne?

Toute pensée serait h'hésitez.

Était-ce utile?

La solution

D'abord (comme Jonathan fait dans son commentaire) pour faire référence à la seconde colonne, vous devez utiliser soit data[[2]] ou data[,2]. Mais si vous utilisez sous-ensemble, vous pouvez utiliser le nom de la colonne. subset(data, CompanyName == ...)

Et pour vous question que je ferai une des:

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

En second j'utiliser grepl (introduite avec la version 2.9 R) qui renvoient vecteur logique avec TRUE de rencontre.

Autres conseils

A deux choses:

1) Les données Mock-up est utile car nous ne savons pas exactement ce que vous êtes confrontés. S'il vous plaît fournir des données si possible. Peut-être que j'ai mal compris dans ce qui suit?

2) Ne pas utiliser [[2]] pour indexer votre data.frame, je pense que [, "colname"] est beaucoup plus claire

3) Si la seule différence est une fuite « 09 » au nom, puis simplement regexp que sur:

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

Maintenant, vous devriez être en mesure de faire votre sous-ensemble sur les données transformées sur la volée:

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> 

Vous pouvez également remplacer la colonne de nom avec la valeur regexp'ed.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top