Trouver l'index de la colonne par son nom dans R [fermé]

11

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
patrickmdnet
la source
3
match("bar",names(x))fonctionne également, mais matchest beaucoup plus utile lorsque le premier argument est également un vecteur.
cardinal
Avez-vous réellement besoin de l'index de la colonne? Vous pouvez également utiliser x [, "bar"] pour obtenir la colonne entière, semblable à la barre x $ habituelle . Et dans les deux cas, indiquez les lignes: x [2: 3, "bar"] ou x $ bar [2: 3]. Si vous devez alimenter l'index à une routine qui nécessite un index, ce n'est pas utile, bien sûr.
Wayne
Bah, ça continue de gâcher mes signes du dollar. L'essentiel est qu'il existe deux façons d'utiliser le nom d'une colonne, la méthode du signe dollar et de l'inclure en indice.
Wayne
3
Cette question semble être hors sujet, car elle porte sur la façon de faire quelque chose dans R, et non sur des problèmes statistiques connexes.
gung - Rétablir Monica

Réponses:

22

c'est probablement le moyen le plus simple:

which(names(x)=="bar")
kohske
la source
11

juste pour ajouter une autre possibilité:
vous pouvez généralement utiliser grepet 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)) ou grep("^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, grepc'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.

Henrik
la source