Dans un bloc de données, je voudrais obtenir l'index de la colonne par son nom. Par exemple:
x <- data.frame(foo=c('a','b','c'),bar=c(4,5,6),quux=c(4,5,6))
Je veux connaître l'index de colonne pour "bar".
J'ai trouvé ce qui suit, mais cela semble inélégant. Existe-t-il une fonction intégrée plus simple qui me manque?
seq(1,length(names(x)))[names(x) == "bar"]
[1] 2
match("bar",names(x))
fonctionne également, maismatch
est beaucoup plus utile lorsque le premier argument est également un vecteur.Réponses:
c'est probablement le moyen le plus simple:
la source
juste pour ajouter une autre possibilité:
vous pouvez généralement utiliser
grep
et c'est des personnes décédées (c'est-à-dire, grepl, pour faire ce genre de travail d'une manière plus sophistiquée en utilisant des expressions régulières.Sur votre exemple, vous pourriez obtenir l'index de la colonne avec:
grep("^bar$", colnames(x))
ougrep("^bar$", names(x))
Les caractères
^
et$
sont des méta caractères pour le début et la fin d'une chaîne, respectivement.Vérifiez? Grep et surtout? Regex pour plus d'informations (c'est-à-dire que vous ne pouvez saisir que des noms / correspondances partielles, ou la valeur de retour est la chaîne elle-même ou un vecteur logique, ...)
Pour moi,
grep
c'est plus R-ish.Le paquet récent de Hadley Wickhem est étroitement lié: stringr , un paquet pour un "traitement de chaîne moderne et cohérent" comprenant des fonctions de type grep. Il a récemment publié un article à ce sujet dans le R Journal.
Voir aussi ma réponse sur stackoverflow sur un problème identique.
la source