. En R à l'aide de condition OU avec des chaînes
J'ai un bloc de données avec environ 40 colonnes, la deuxième colonne, les données[2] contient le nom de la société que le reste de la ligne de données décrit. Toutefois, les noms des entreprises sont différents selon les années (de fuite 09 pour les données de 2009, rien pour 2010).
Je voudrais être en mesure de sous-ensemble de données de sorte 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)
Essentiellement, je vais avoir de la difficulté à l'aide de l'opérateur OU à l'intérieur de la fonction de sous-ensemble.
Cependant, j'ai essayé d'autres alternatives:
subset(data, data[[2]] == grep("Company Name", data[[2]]))
Peut-être il ya un moyen plus facile de le faire en utilisant une fonction de chaîne?
Toute pensée serait appreicated.
La syntaxe, c'est mon pire ennemi. Merci Jonathan. C'est exactement ce que j'essayais de faire.
OriginalL'auteur Brandon Bertelsen | 2010-01-23
Vous devez vous connecter pour publier un commentaire.
Tout d'abord (comme Jonathan le fait dans son commentaire) pour faire référence à la deuxième colonne, vous devez utiliser
data[[2]]
oudata[,2]
. Mais si vous utilisez un sous-ensemble vous pouvez utiliser le nom de colonne:subset(data, CompanyName == ...)
.Et pour votre question, je vais faire un:
En seconde j'utilise
grepl
(introduite avec la version R 2.9) qui renvoie logique de vecteur avecTRUE
pour le match.Hilarant merci beaucoup Marek, ne savent même pas sous-ensemble accepte
%in%
. Cela permet d'économiser beaucoup de lourdeur / erreurs de frappe OU de clauses. +1 !! ma réponse de la semaine!Que faire si le nom de la colonne dispose d'un espace? par exemple "Nom de Société". Peut-on encore utiliser des sous-ensemble
Oui. Mais vous devez utiliser les tiques. Quelque chose comme
subset(data, 'Company Name'=="Name A")
(je ne peux pas utiliser le "vrai" retour-tiques en commentaire si vous devez le changer).Puis-je poser une question stupide? Ce n'est que la goutte d'argument? Je n'ai pas vraiment à la description de l'aide.
OriginalL'auteur Marek
Un couple de choses:
1) Maquette de données est utile que nous ne savons pas exactement ce que vous êtes confrontés. Veuillez fournir des données si possible. Peut-être que j'ai mal compris dans ce qui suit?
2) N'utilisez pas de
[[2]]
pour indexer vos données.cadre, je pense que [,"colname"] est beaucoup plus claire3) Si la seule différence est une fuite en '09' dans le nom, puis il suffit de regexp que:
Maintenant, vous devriez être en mesure de faire de votre sous-ensemble sur la à la volée des données transformées:
Vous pouvez aussi remplacer le nom de la colonne avec des regexp ed valeur.
Mon plaisir -- heureux, il a aidé.
OriginalL'auteur Dirk Eddelbuettel