Sütun dizinini R [kapalı] içinde adına göre bulma


11

Bir veri çerçevesinde, sütunun dizin adıyla almak istiyorum. Örneğin:

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

"Bar" için sütun dizini bilmek istiyorum.

Aşağıdaki ile geldim ama yetersiz görünüyor. Kaçırdığım daha basit bir yapı var mı?

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

3
match("bar",names(x))gerçi de, işler matchİlk argüman da bir vektör olduğu zaman çok daha yararlıdır.
kardinal

Sütunun dizinine gerçekten ihtiyacınız var mı? Ayrıca, sütunun tamamını almak için x [, "bar"] öğesini, normal x $ çubuğuna benzer şekilde kullanabilirsiniz . Ve her iki durumda da, şu satırları abone olun: x [2: 3, "bar"] veya x $ bar [2: 3]. Dizini bir dizin gerektiren bir rutine beslemeniz gerekiyorsa, bu elbette yardımcı olmaz.
Wayne

Bah, dolar işaretlerimi berbat ediyor. Sonuç olarak, bir sütunun adını dolar işareti yöntemini kullanmanın ve bunu bir alt simge olarak eklemenin iki yolu vardır.
Wayne

3
Bu soru konu dışı gibi görünmektedir, çünkü R ile ilgili bir şeylerin nasıl yapılacağıyla ilgilidir ve ilgili istatistiksel konularla ilgili değildir.
gung - Monica'yı eski durumuna getirin

Yanıtlar:


22

muhtemelen bu en basit yol:

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

11

sadece başka bir olasılık eklemek için: Normal ifadeler kullanarak bu tür işleri daha sofistike bir şekilde yapmak için
genellikle kullanabilirsiniz grepve bu da (yani, grepl).

Örneğinizde aşağıdakilerle sütun dizini alabilirsiniz:

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

^Ve $sırasıyla bir dizenin başındaki ve sonundaki için meta karakterlerdir.

Daha fazla bilgi için? Grep ve özellikle? Regex'i kontrol edin (yani, yalnızca kısmi adları / eşleşmeleri alabilir veya dönüş değeri dizenin kendisi veya mantıksal bir vektör, ...)

Benim grepiçin daha çok R-ish.

Hadley Wickhem'in son paketi: stringr , grep benzeri işlevler de dahil olmak üzere "modern, tutarlı dize işleme" için bir paket. Yakın zamanda R Journal'da bir makale yayınladı .

Aynı konuda stackoverflow hakkındaki cevabımı da görün.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.