2012-02-10 3 views
5

私は大きなアンケートに取り組んでいます。異なる質問(例:df1とdf2)の要約頻度表を作成しています。しかし、.csvファイルとしてエクスポートする前に2つのデータフレームを結合します。

write.csv(df1 ,file="df2.csv") 

私のアンケートは、多くの質問、したがって、データフレームを持っているとして、Rに中道がある場合、私は思っていた:

a<-c(1:5) 
b<-c(4,3,2,1,1) 
Percent<-c(40,30,20,10,10) 
df1<-data.frame(a,b,Percent) 
c<-c(1,1,5,2,1) 
Percent<-c(10,10,50,20,10) 
df2<-data.frame(a,c,Percent) 
rm(a,b,c,Percent) 

私は通常、次のコマンドを使用してCSVファイルとしてデータフレームをエクスポート異なるデータフレームを結合して(例えば、それらを分ける線で)、それらをcsvにエクスポートします(そして、最終的にはExcelで開きます)。私がExcelを開くと、質問データフレームがすべて1つのファイルが1つだけ表示されます。この1つのCSVファイルは、結果を表示するために順番に開く必要がある個々のファイルを持つよりもはるかに簡単です。

事前に感謝します。

+0

私はそれらを 'merge 'してみる – James

+0

ファイル接続を開くと、両方の機能で利用可能なappendパラメータを使用してwrite.csvとcatを使ってファイルに書き込むことができます。 –

答えて

4

最終目標がExcelスプレッドシートの場合は、xlsファイルを直接書き込むためにRで利用できるいくつかのツールを検討します。個人的には、私はXLConnectパッケージを使用していますが、xlsxといくつかのwrite.xls関数もさまざまなパッケージに浮かんでいます。

それはちょうどこのような状況ではいくつかの便利なベクトル化することができますので、私はXLConnectを好きに起こる:それ以外の場合は、各データフレームの列ヘッダーを書きますので、私はheader = FALSEを指定

require(XLConnect) 

#Put your data frames in a single list 
# I added two more copies for illustration 
dfs <- list(df1,df2,df1,df2) 

#Create the xls file and a sheet 
# Note that XLConnect doesn't seem to do tilde expansion! 
wb <- loadWorkbook("/Users/jorane/Desktop/so.xls",create = TRUE) 
createSheet(wb,"Survey") 

#Starting row for each data frame 
# Note the +1 to get a gap between each 
n <- length(dfs) 
rows <- cumsum(c(1,sapply(dfs[1:(n-1)],nrow) + 1)) 

#Write the file 
writeWorksheet(wb,dfs,"Survey",startRow = rows,startCol = 1,header = FALSE) 
#If you don't call saveWorkbook, nothing will happen 
saveWorkbook(wb) 

。しかし、最後にxlsファイルの一番上に一行を追加することはあまり追加作業ではありません。

+0

それは素晴らしい@ジョランです - どのような素晴らしいパッケージ!ちょっとした簡単な追加質問...まず、テーブルのすぐ上にあるデータフレームの名前を持つことが可能ですか(個々のデータフレームをインタビューの質問に合わせるほうがずっと簡単になります)。私のデータフレームの名前は、年齢、性別などの各質問を参照するので、これは非常に便利です。また、視覚的な目的のために、データフレームの周りに境界線を置くことは可能ですか? –

+0

@KatieT可能な限り枠線を追加します。 '?createCellStyle'、'?setBorder'を参照してください。ただし、各周辺セルに適切な境界を個別に指定する必要があるため、プログラムで行うのは非常に便利ではありません。 df名を追加する最も簡単な方法は 'c( 'Age'、NA、NA、...)'のような別の列を使うことです。 – joran

+0

excelにエクスポートしたときのdata.framesの分離方法について説明できますか?この例ではうまく動作しますが、より多様なdata.framesで同じコードを試すと、data.framesが重なり合う可能性があります。私は 'rows < - cumsum(c(1、sapply(dfs、nrow)[ - 1] + 1))'内の数値を変更しようとしましたが、data.frames間の一貫性のあるスペースを確保する信頼できる方法は見つかりませんでした。 –

1

ジェームズはコメントとして、あなたは

merge(df1, df2, by="a") 

を使用することができますが、それは、水平方向のデータを組み合わせるでしょう。あなたが縦にそれらを結合したい場合は、rbindを使用することができます。

rbind(df1, df2, df3,...) 

(注:列名が作業にrbindために一致する必要があります)。