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
match("bar",names(x))
juga berfungsi, meskipunmatch
jauh lebih berguna ketika argumen pertama juga merupakan vektor.Jawaban:
mungkin ini adalah cara paling sederhana:
sumber
hanya untuk menambahkan kemungkinan lain:
Anda biasanya dapat menggunakan
grep
dan 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))
ataugrep("^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,
grep
lebih 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.
sumber