web-dev-qa-db-fra.com

Obtenir l'index de colonne de label dans un cadre de données

Disons que nous avons le bloc de données suivant:

> df
  A B C
1 1 2 3
2 4 5 6
3 7 8 9

Nous pouvons sélectionner la colonne 'B' à partir de son index:

> df[,2]
[1] 2 5 8

Est-il possible d'obtenir l'index (2) à partir du libellé de la colonne ('B')?

61
Leo

vous pouvez obtenir l'index via grep et colnames:

grep("B", colnames(df))
[1] 2

ou utiliser 

grep("^B$", colnames(df))
[1] 2

pour obtenir uniquement les colonnes appelées "B" sans celles contenant un B, par ex. "ABC".

88
Henrik

Ce qui suit le fera:

which(colnames(df)=="B")
77
NPE

Je voulais voir tous les index pour les noms de fichiers parce que je devais effectuer un réarrangement compliqué de column . J'ai donc imprimé les noms de fichiers en tant que données. Les noms de domaine sont les indices.

as.data.frame(colnames(df))

1 A
2 B
3 C
6
chimeric

suite à la réponse de chimeric ci-dessus: j’avais également besoin d’obtenir tout les index de colonne dans df , donc j’ai utilisé:

which(!names(df)%in%c()) 

ou stocker dans une liste:

indexLst<-which(!names(df)%in%c())
2
Grant Shannon

Cela semble être un moyen efficace de lister les vars avec le numéro de colonne:

cbind(names(df)) 

Sortie:

     [,1]
[1,] "A" 
[2,] "B" 
[3,] "C" 

Parfois, j'aime bien copier des variables avec position dans mon code alors j'utilise cette fonction:

varnums<- function(x) {w=as.data.frame(c(1:length(colnames(x))),
          paste0('# ',colnames(x)))
names(w)= c("# Var/Pos")
w}
varnums(df)

Sortie:

# Var/Pos
# A         1
# B         2
# C         3
1
Dan Tarr

Utilisez la fonction t:

t(colnames(df))

     [,1]   [,2]   [,3]   [,4]   [,5]   [,6]  
[1,] "var1" "var2" "var3" "var4" "var5" "var6"
0
user108927