Menemukan indeks kolom dengan namanya di R [ditutup]

11

Dalam bingkai data, saya ingin mendapatkan indeks kolom dengan nama. Sebagai contoh:

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

Saya ingin tahu indeks kolom untuk "bar".

Saya datang dengan yang berikut tetapi tampaknya tidak memenuhi syarat. Apakah ada built-in lebih mudah bahwa saya hilang?

seq(1,length(names(x)))[names(x) == "bar"]
[1] 2
patrickmdnet
sumber
3
match("bar",names(x))juga berfungsi, meskipun matchjauh lebih berguna ketika argumen pertama juga merupakan vektor.
kardinal
Apakah Anda benar-benar membutuhkan indeks kolom? Anda juga dapat menggunakan x [, "bilah"] untuk mendapatkan seluruh kolom, mirip dengan bilah x $ biasa . Dan dalam kedua kasus, subskripsi baris: x [2: 3, "bar"] atau x $ bar [2: 3]. Jika Anda perlu memasukkan indeks ke rutin yang memerlukan indeks, tentu saja itu tidak membantu.
Wayne
Bah, itu terus mengacaukan tanda dolar saya. Intinya adalah bahwa ada dua cara untuk menggunakan nama kolom metode tanda dolar dan memasukkannya sebagai subskrip.
Wayne
3
Pertanyaan ini tampaknya di luar topik karena ini adalah tentang bagaimana melakukan sesuatu di R, & bukan tentang masalah statistik terkait.
gung - Reinstate Monica

Jawaban:

21

mungkin ini adalah cara paling sederhana:

which(names(x)=="bar")
kohske
sumber
11

hanya untuk menambahkan kemungkinan lain:
Anda biasanya dapat menggunakan grepdan itu decedents (yaitu, grepl, untuk melakukan pekerjaan semacam ini dengan cara yang lebih canggih menggunakan ekspresi reguler.

Pada contoh Anda, Anda bisa mendapatkan indeks kolom dengan:

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

The ^dan $yang meta karakter untuk awal dan akhir dari string, masing-masing.

Periksa? Grep dan terutama? Regex untuk info lebih lanjut (yaitu, Anda hanya dapat mengambil sebagian nama / kecocokan, atau nilai pengembaliannya adalah string itu sendiri atau vektor logis, ...)

Bagi saya, greplebih R-ish.

Sangat terkait adalah paket terbaru oleh Hadley Wickhem: stringr , Paket untuk "pemrosesan string modern, konsisten" termasuk fungsi grep like. Dia baru-baru ini menerbitkan makalah tentang itu di R Journal

Lihat juga jawaban saya di stackoverflow pada masalah yang sama.

Henrik
sumber