2016-03-10 41 views
1

多個列計算百分我需要在以下的概率值0.05,0.25,0.50,0.75,0.90,0.95,0.99,1爲100個變量排除時間來計算位數對中的R

數據結構如下

數據集名稱-DF

time Var1 var2 var3.....var100 

1 100 230 378......300 

2 200 145 129......240 

3 150 235 200 .... 690 

我使用的以下邏輯。

percentiles <- do.call("rbind",tapply(df[2:100],quantile,probs=c(0,0.05,0.25,0.50,0.75,0.90,0.95,0.99,1),na.rm=TRUE)) 

由於這隻能在向量上運行,因此很難調用所有100個變量。

+1

我認爲你最好閱讀'?tapply'的文檔。您可能需要'lapply'而不是'tapply' – akrun

+0

@akrun - 上面的代碼適用於列表(帶有應用函數)。但是,我們如何才能獲得與數據框相同的結果? – Rocky

回答

4

爲什麼要使用tapply?在這裏使用apply似乎很好。

quants <- c(0,0.05,0.25,0.50,0.75,0.90,0.95,0.99,1) 
apply(df[2:100] , 2 , quantile , probs = quants , na.rm = TRUE) 
+0

謝謝大衛。這工作。 – bnair

+0

很高興幫助。請考慮接受爲您工作的答案(http://stackoverflow.com/help/someone-answers)。 –

+0

@DavidHeckmann嘿!你怎麼能得到相同的結果,但安排列的概率。我試過你的代碼,我得到了列上的行和變量上提到的數量。我想獲得行上的列和變量的分位數。在這個單行代碼中快速修復? – Rocky