Tìm chỉ mục cột theo tên của nó trong R [đã đóng]


11

Trong khung dữ liệu, tôi muốn lấy chỉ mục của cột theo tên. Ví dụ:

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

Tôi muốn biết chỉ số cột cho "thanh".

Tôi đã đưa ra những điều sau đây nhưng có vẻ như không phù hợp. Có một nội dung đơn giản hơn mà tôi đang thiếu?

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

3
match("bar",names(x))cũng hoạt động, mặc dù matchhữu ích hơn nhiều khi đối số đầu tiên cũng là một vectơ.
hồng y

Bạn có thực sự cần chỉ số của cột? Bạn cũng có thể sử dụng x [, "bar"] để lấy toàn bộ cột, tương tự như thanh x $ thông thường . Và trong cả hai trường hợp, hãy đăng ký các hàng: x [2: 3, "bar"] hoặc x $ bar [2: 3]. Nếu bạn cần đưa chỉ mục vào một thói quen yêu cầu một chỉ mục, tất nhiên điều đó không hữu ích.
Wayne

Bah, nó tiếp tục làm hỏng ký hiệu đô la của tôi. Điểm mấu chốt là có hai cách để sử dụng tên của một phương thức ký hiệu đô la và bao gồm nó như là một chỉ mục.
Wayne

3
Câu hỏi này dường như lạc đề vì đó là về cách thực hiện điều gì đó trong R, chứ không phải về bất kỳ vấn đề thống kê liên quan nào.
gung - Tái lập Monica

Câu trả lời:


21

có lẽ đây là cách đơn giản nhất:

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

11

chỉ để thêm một khả năng khác:
Bạn thường có thể sử dụng grepvà đó là những người đã mất (tức là grepl, để thực hiện các loại công việc này theo cách tinh vi hơn bằng cách sử dụng các biểu thức thông thường.

Trong ví dụ của bạn, bạn có thể lấy chỉ mục cột với:

grep("^bar$", colnames(x)) hoặc là grep("^bar$", names(x))

Các ^$là các ký tự meta cho đầu và cuối của một chuỗi, tương ứng.

Kiểm tra? Grep và đặc biệt là? Regex để biết thêm thông tin (nghĩa là bạn chỉ có thể lấy một phần tên / kết hợp hoặc giá trị trả về là chính chuỗi hoặc vectơ logic, ...)

Đối với tôi, greplà R-ish nhiều hơn.

Liên quan chặt chẽ là gói gần đây của Hadley Wickhem: stringr , Gói dành cho "xử lý chuỗi nhất quán, hiện đại" bao gồm các hàm giống như grep. Gần đây ông đã xuất bản một bài báo về nó trên Tạp chí R.

Xem thêm câu trả lời của tôi về stackoverflow về một vấn đề giống hệt nhau.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.