2011-11-03 10 views
6

私は自分自身で、異なるデータフレーム(表、行列など)の列を一緒に貼りたいと思っています。たとえば、私は平均のテーブルとスタンダードのテーブルを持っています。ラテックス印刷用の括弧で囲まれた2つをsdと一緒に貼り付けてください。私は友好的なプライベートソリューションがあると思うが、2つのデータフレームで作業する方法を考えることができない(私はリストとしてデータフレームを格納しようとし、ldplyを使用しようとしたが、これはリストプライヤー関数を使った最初の試みであり、2つのデータフレームの列を貼り付けます。

は、事前にありがとうございません。

#========= 
#fake data 
#========= 
x<-mtcars[1:3,1:3] 
y<-mtcars[1:3,8:10] 


#========================== 
#A column pasting function 
#========================== 
meansd<-function(x, y){ 
x<-round(x, dig=2) 
y<-round(y, dig=2) 
paste(x, "(", y, ")", sep="") 
} 

限り私が得たようだそれ。

望ましい結果 必要ませ列名を。リターンが行列またはデータフレームである場合、私は気にしません。

16.46(0) 0(1) 1(4) 
17.02(0) 0(1) 1(4) 
18.61(1) 1(1) 1(4) 
+2

これを使用してlatexの回帰サマリテーブルを作成する場合は、 'memisc'パッケージの' mtable'を見てください。最小限の労力で複数のフォーマットで回帰出力を出力できる非常に柔軟な関数です。 – Ramnath

+0

@Ramnathご意見ありがとうございます。私はちょうどこのパッケージを最近知った。私はラテックス出力のためにたくさんのことをしていますが、mtableができないものには柔軟性が必要なものはまだいくつかあります。 –

+0

結果のdata.frameを 'xtable'するつもりですか? –

答えて

4

ここでは、各列をループスルーして貼り付ける機能を編集しています。これはあなたの望む結果をもたらしますが、これを行うためのより洗練された方法があります。ここで

meansd<-function(x, y){ 
    x<-round(x, digits = 2) 
    y<-round(y, digits = 2) 
    out <- matrix(ncol = dim(x)[1], nrow = dim(x)[2]) 
    for(i in 1:dim(x)[1]) 
    { 
     out[i, ] <-paste(x[i, ], "(", y[i, ], ")", sep="") 
    } 
    return(out) 
} 
+0

Ryanはあなたの応答に感謝します。非常にうまく動作します。可能であれば、私は非ループの答えを望んでいる(私はそれがちょうど方法を知らないと確信している)。 –

+0

これは私の仕様に合った最初の答えでしたので、私はそれに受け入れられた答えの確認をします。私は3つのそれぞれをチェックできたらいいと思った。 –

7

はmapply程度plyr

t(ldply(1:NCOL(x), function(i) meansd(x[,i], y[,i]))) 
+0

私はそれがplyrでできることを知っていました。ありがとうございました。 –

7

方法を使用してのアプローチですか?

x <- mtcars[1:3,1:3] 
y <- mtcars[1:3,8:10] 

mypaste <- function(x,y) paste(x, "(", y, ")", sep="") 

mapply(mypaste, x,y) 

    mpg  cyl disp  
[1,] "21(0)" "6(1)" "160(4)" 
[2,] "21(0)" "6(1)" "160(4)" 
[3,] "22.8(1)" "4(1)" "108(4)" 
+0

非常にエレガント! – Ramnath

+1

ありがとう!私はあなたの 'ldply'ソリューションも好きだった。同様の味は、ちょうど少しハドレーのハンマーと一緒に攪拌。 –

+0

私のお気に入りの解決策。ありがとうございました。シンプルで美しい。非常に創造的な考え方。 –

関連する問題