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.