2016-08-08 13 views
3

私は比較的大きなデータセットを持っています。私は、要素の組み合わせに対して平均と標準偏差の表を印刷したいと思います。平均(SD)の表

  A   B 
test1 2.0 (1.0) 5.0 (2.0) 
test2 6.3 (3.1) 2.1 (0.7) 

これは簡単な方法はありますか?

私が手に最も近いtables::tabular機能(最小限の例)を使用している:これを出力する...

# Example data 
df = data.frame(
    group=c('A', 'A', 'A', 'B', 'B', 'B'), 
    value=c(1,2,3,6,8,9)) 

# Print table  
library(tables) 
tabular(value ~ group * (mean + sd), df) 

 group    
     A  B   
     mean sd mean sd 
value 2  1 7.667 1.52 

しかし、私はにきちんとした方法を考え出したていませんこの形式を上記のmean (SD)形式に変換します。注:これらの例はごくわずかです。私はより大きな階層(現在4 x(mean + sd)の列と2 x 3の行)を持ちますが、基本的な問題は同じです。

+0

おそらく、 'test' varを含む例を作るべきです。 – Frank

答えて

2
library(reshape2) 

formatted.table <- dcast(df, 'value' ~ group, fun.aggregate = function(x) { 
    return(sprintf('%0.1f (%0.1f)', mean(x), sd(x))) 
}) 

# "value"   A   B 
# value 2.0 (1.0) 7.7 (1.5) 
クリスの答えに似

が、少しクリーナー(および必要に応じていない "テスト" 変数)。

dplyrパッケージでこのタイプの集約を行うこともできます。

+1

ありがとう、@フランク、私はそれに応じて編集しました。 – jdobres

+0

テスト変数は必要ありませんが、最初のサンプルフレームにありました...しかし、 'sprintf'のように! – Chris

+0

ありがとう、これはダニを行う!私は私の例ではあまりにも小さすぎることがわかった。実際、私はtest1とtest2をdata.frameの中で別々の*カラム*として扱い、あるレベルのレベルではありません。 'dcast'は1つの' value.var'しか取ることができません - あるいは方法がありますか? 'dcast'を呼び出す前にいつも'溶かす 'ことができました。 –

2

data.tableから、我々は(テストVARを含む)dcastを使用することができます。

library(data.table) 

df = data.frame(
    group=c('A', 'A', 'A', 'B', 'B', 'B','A', 'A', 'A', 'B', 'B', 'B'), 
    value=c(1,2,3,6,8,9,1,2,3,6,8,9), 
    test=c(1,1,1,1,1,1,2,2,2,2,2,2)) 

dcast(df, test ~ group, fun.aggregate = function(x){ 
    paste(round(mean(x),1)," (", round(sd(x),1),")", sep = "") 
}) 
    test  A   B 
1 1 2 (1) 7.7 (1.5) 
2 2 2 (1) 7.7 (1.5) 
+0

Fyi、あなたはそこのreshape2パッケージから 'dcast'を使っています。代わりにそのパッケージを読み込むことができます。 – Frank