在导出为.csv文件之前加入两个数据帧

时间:2012-02-10 16:16:39

标签: r csv export-to-csv

我正在编写一份大问卷 - 我为不同的问题(例如df1和df2)生成汇总频率表。

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文件:

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

然而,由于我的调查问卷有很多问题,因此有数据框架,我想知道R中是否有一种方法可以组合不同的数据框(比如用分隔它们的线),然后将它们导出到csv(然后最终打开它们)在Excel中)?当我打开Excel时,因此我只有一个文件包含我的所有问题数据帧,一个在另一个之下。这个csv文件比拥有单个文件要容易得多,我必须依次打开这些文件来查看结果。

非常感谢提前。

2 个答案:

答案 0 :(得分:4)

如果您的最终目标是Excel电子表格,我会查看R中可用于直接编写xls文件的一些工具。就个人而言,我使用 XLConnect 包,但还有 xlsx 以及在各种包中浮动的几个write.xls函数。

我碰巧喜欢 XLConnect ,因为它允许在这样的情况下进行一些方便的矢量化:

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)

我指定了header = FALSE,否则它将为每个数据帧写入列标题。但是最后在xls文件的顶部添加一行并不是一件额外的工作。

答案 1 :(得分:1)

正如詹姆斯评论的那样,你可以使用

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

但这将水平组合数据。如果要将它们垂直组合,可以使用rbind

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

(注意:列名需要匹配rbind才能正常工作)。