Trovare l'indice di colonna in base al nome in R [chiuso]


11

In un frame di dati, vorrei ottenere l'indice della colonna per nome. Per esempio:

x <- data.frame(foo=c('a','b','c'),bar=c(4,5,6),quux=c(4,5,6))

Voglio sapere l'indice di colonna per "bar".

Ho pensato a quanto segue ma sembra inelegante. C'è qualcosa di più semplice che mi manca?

seq(1,length(names(x)))[names(x) == "bar"]
[1] 2

3
match("bar",names(x))funziona anche, sebbene matchsia molto più utile quando anche il primo argomento è un vettore.
cardinale il

Hai davvero bisogno dell'indice della colonna? Puoi anche usare x [, "bar"] per ottenere l'intera colonna, in modo simile alla solita x $ bar. E in entrambi i casi, sottoscrivere le righe: x [2: 3, "bar"] o x $ bar [2: 3]. Se è necessario alimentare l'indice a una routine che richiede un indice, ovviamente non è utile.
Wayne,

Bah, continua a rovinare i miei simboli di dollaro. La linea di fondo è che ci sono due modi per usare il nome di una colonna come metodo del simbolo di dollaro e includerlo come pedice.
Wayne,

3
Questa domanda sembra essere fuori tema perché riguarda come fare qualcosa in R, e non su eventuali problemi statistici correlati.
gung - Ripristina Monica

Risposte:


22

probabilmente questo è il modo più semplice:

which(names(x)=="bar")

11

solo per aggiungere un'altra possibilità: di
solito è possibile utilizzare greped è ingannevole (cioè grepl, fare questo tipo di lavori in un modo più sofisticato usando espressioni regolari.

Nel tuo esempio potresti ottenere l'indice di colonna con:

grep("^bar$", colnames(x)) o grep("^bar$", names(x))

I ^e $sono meta caratteri rispettivamente per l'inizio e la fine di una stringa.

Controlla? Grep e soprattutto? Regex per ulteriori informazioni (ad esempio, puoi prendere solo nomi / corrispondenze parziali o il valore restituito è la stringa stessa o un vettore logico, ...)

Per me, grepè più R-ish.

Fortemente correlato è il recente pacchetto di Hadley Wickhem: stringr , Un pacchetto per "elaborazione di stringhe moderna e coerente" che include funzioni simili a grep. Di recente ha pubblicato un articolo su di esso nel R Journal.

Vedi anche la mia risposta su StackOverflow su un problema identico.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.