2012-01-20 55 views
5

Tôi đang sử dụng R để tính toán một số kết quả thống kê cơ bản. Tôi đang sử dụng hàm quantile(), để tính toán các lượng tử trên một cột khung dữ liệu như sau.Làm cách nào để lấy một giá trị số đơn giản từ một vector số có tên trong R?

> quantile(foobars[,1]) 
    0%  25%  50%  75% 100% 
189000 194975 219500 239950 1000000 

Tôi muốn có thể truy cập riêng lẻ các số liệu được tính toán. Tuy nhiên, tôi dường như không thể tìm ra cách để làm điều đó. Khi tôi kiểm tra lớp của kết quả trả về, nó là một số 1 chiều.

Tôi cố gắng này:

> q <- quantile(foobars[,1]) 
> q[3] 
    50% 
219500 

Mà dường như để trả về một tuple (mức quantile + số). Tôi chỉ quan tâm đến số (219.500 trong trường hợp này.

Làm thế nào tôi có thể truy cập vào chỉ số vào một biến đơn giản (số)?

Trả lời

16

Bạn đang bối rối các in đại diện của các giá trị số với . giá trị thực tế As far as R là có liên quan, q chứa một vector số tên:

> dat <- rnorm(100) 
> q <- quantile(dat) 
> q 
     0%  25%  50%  75%  100% 
-2.2853903 -0.5327520 -0.1177865 0.5182007 2.4825565 
> str(q) 
Named num [1:5] -2.285 -0.533 -0.118 0.518 2.483 
- attr(*, "names")= chr [1:5] "0%" "25%" "50%" "75%" ... 

Tất cả các "tên" chút có nghĩa là các vector có một thuộc tính gắn liền "names" chứa (trong trường hợp này) nhãn quantile. R in chúng cho một cái tên vectơ vì chúng được coi là hữu ích khi có in ra nếu có. Nhưng, họ không hề thay đổi thực tế rằng đây là một vector số. Bạn có thể sử dụng những tính toán trong, nếu như họ không có "names" thuộc tính:

> q[3] + 10 
    50% 
9.882214 

Nếu tên làm phiền bạn, các unname() chức năng tồn tại để loại bỏ chúng:

> q2 <- unname(q) 
> q2 
[1] -2.2853903 -0.5327520 -0.1177865 0.5182007 2.4825565 

Để hoàn chỉnh, tôi nên có thể thêm rằng bạn có thể trích xuất các "names" bằng cách sử dụng chức năng names(), mà cũng có một phiên bản chuyển nhượng ('names<-'()). Vì vậy, một cách khác để xóa tên khỏi vectơ là chỉ định NULL cho các tên:

> q3 <- q 
> names(q3) 
[1] "0%" "25%" "50%" "75%" "100%" 
> names(q3) <- NULL 
> names(q3) 
NULL 
+1

'as.vector (q)' cũng sẽ xóa tên – sam

Các vấn đề liên quan