2015-10-14 24 views
5

Tôi có một data.frame và tôi muốn áp dụng quantile vào đó để làm cho dữ liệu tìm kiếm đơn giản:Làm thế nào để áp dụng quantile trên dataframe

> head(Quartile) 
      GSM1321374 GSM1321375 GSM1321376 GSM1321377 GSM1321378 GSM1321379 
1415670_at 11.203302 11.374616 10.876187 11.23639 11.02051 10.926481 
1415671_at 11.196427 11.492769 11.493717 11.01683 11.15016 11.576188 
1415672_at 11.550974 11.267559 11.800991 11.57551 10.93359 11.222779 
1415673_at 11.293390 10.978280 11.367316 10.45135 10.35822 10.234964 
1415674_a_at 9.254073 10.572670 9.361991 11.26998 10.21125 10.245857 
1415675_at  9.922985 9.228195 9.798156 10.02844 10.19928 9.749947 

tôi áp dụng chức năng sau đây và nó đã làm công việc.

quantfun <- function(x) as.integer(cut(x, quantile(x, probs=0:4/4), include.lowest=TRUE)) 
a <- apply(Quartile,1,quantfun) 
b <- t(a) 
colnames(b) <- colnames(Quartile) 

Và kết quả là:

> head(b) 
      GSM1321374 GSM1321375 GSM1321376 GSM1321377 GSM1321378 GSM1321379 
1415670_at   3   4   1   4   2   1 
1415671_at   2   3   4   1   1   4 
1415672_at   3   2   4   4   1   1 
1415673_at   4   3   4   2   1   1 
1415674_a_at   1   4   1   4   2   3 
1415675_at   3   1   2   4   4   1 

Nhưng vấn đề là nó áp dụng quantile trên mỗi cột riêng và tôi muốn một quantile thống nhất cho toàn bộ data.frame.

> duration = Quartile$GSM1321374 
> quantile(duration) 
     0%  25%  50%  75%  100% 
9.254073 9.922985 11.120381 11.203302 11.550974 
> duration = Quartile$GSM1321375 
> quantile(duration) 
     0%  25%  50%  75%  100% 
9.228195 10.572670 10.946407 11.267559 11.492769 
+1

Hãy thử 'Quartile [] <- matrix (quantfun (unlist (Quartile)), nrow (Quartile))' Thay vì hàm áp dụng . –

+0

@Pierre Lafortune Và làm thế nào tôi có thể kiểm tra thời gian của định lượng ..? – user3253470

+0

Bạn đang tìm kiếm 'quantile (unlist (Quartile))'? –

Trả lời

2

Tìm các dãy tứ phân vị của khung dữ liệu của bạn đầu tiên để có được thùng của bạn:

quantile(unlist(Quartile)) 
     0%  25%  50%  75%  100% 
9.228195 10.229036 10.997555 11.275832 11.800991 

Bây giờ chúng ta có phạm vi cho mỗi nhóm (nghĩa là 9,228-10,229). Sau đó, tạo khung dữ liệu tứ phân vị:

Quartile[] <- matrix(quantfun(unlist(Quartile)), nrow(Quartile)) 

Chúng tôi đang sử dụng thực tế là unlist(Quartile) xử lý khung dữ liệu làm vectơ. Nếu bạn muốn giữ nguyên khung dữ liệu ban đầu và sử dụng bản sao:

Quartile2 <- Quartile 
Quartile2[] <- matrix(quantfun(unlist(Quartile2)), nrow(Quartile2)) 
Các vấn đề liên quan