2015-10-14 62 views
5

申請位數我有data.frame,我想申請位數上,使數據看起來簡單:如何在數據幀

> 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 

我申請下面的函數,它做的工作。

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) 

,輸出是:

> 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 

但問題是,它在每列分別適用位數,我想對整個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

嘗試'四分位數[] < - 矩陣(quantfun(不公開(四分之三)),nrow(四分之三))'取而代之的是應用功能。 –

+0

@Pierre Lafortune我如何檢查分位數的持續時間..? – user3253470

+0

您是否在尋找分位數(unlist(Quartile))'? –

回答

2

找到你的數據幀的四分位數範圍內第一個獲得您的垃圾桶:

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

我們現在有範圍爲每個組(即9.228 - 10.229)。然後創建四分位數的數據幀:

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

我們正在使用的事實,unlist(Quartile)對待數據幀作爲載體。如果你想離開原來的數據幀完整,使用複製:

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