将数据框按列拆分,并将其导出为xlsx文件。

9 浏览
0 Comments

将数据框按列拆分,并将其导出为xlsx文件。

我很惊讶地发现没有一种简单的方法可以将多个数据框导出到Excel文件的多个工作表中。我尝试了xlsx包,似乎只能写入一个工作表(覆盖旧工作表);我还尝试了WriteXLS包,但一直给我报错...\n我的代码结构如下:按设计,对于每次迭代,输出数据框(tempTable)和工作表名称(sn)会更新并导出到一个标签页中。\n

for (i in 2 : ncol(code)){ 
        ...
        tempTable <- ...
        sn <- ...
        WriteXLS("tempTable", ExcelFileName = "C:/R_code/../file.xlsx",
              SheetNames = sn);
}

\n我可以导出多个csv文件,但肯定有一种简单的方法可以在Excel中实现这一点,对吧?

0
0 Comments

文章标题:使用writexl库将数据逐列拆分并导出到xlsx文件的问题及解决方法

最近,rOpenSci推出了一款新的库:writexl。它是一个基于libxlsxwriter的轻量级、便携的将数据框导出为xlsx文件的工具,无需Java或Excel的支持。

作者发现,与之前的建议相比,writexl更好用且速度更快(使用开发版本):

library(writexl)
sheets <- list("sheet1Name" = sheet1, "sheet2Name" = sheet2) #假设sheet1和sheet2是数据框
write_xlsx(sheets, "path/to/location")

这个方法对我来说很有效,而openxlsx则无法使用(因为我无法在工作中安装rtools)。

你用的是哪个版本?默认的CRAN下载版本还不支持多个工作表:' Error in writexl::write_xlsx(list(... : Argument x must be a data frame or list of data frames '。

正如我之前所说,我使用的是开发版本。

我从CRAN安装的版本,多个工作表对我来说是可用的(R 3.3.0)。请检查您列表中的对象是否是数据框。

这个方法真的很好用。我无法在R中安装xlsx库。

0
0 Comments

问题的原因是作者想要将一个数据框按列分割并将其导出到xlsx文件中,作者使用了openxlsx库来实现这个目标。openxlsx库相对于xlsx库的优势在于它消除了对java库的依赖。作者使用了openxlsx库的write.xlsx函数将一个数据框列表写入到单个工作簿的多个工作表中,使用列表的名称作为工作表的名称。作者还提到openxlsx库处理了第一行的R编号的问题。

解决方法是使用openxlsx库的write.xlsx函数,并将数据框列表作为参数传入,同时指定文件名和文件类型。如果需要在同一个Excel文件中写入多个工作表,则可以设置append参数为TRUE。

作者还提到openxlsx库的性能较好,速度较快,而且不会出现内存溢出的问题。作者在创建过程中使用了循环来构建数据框列表,并将每个数据框添加到列表中,最后将整个列表写入到Excel文件中。这个过程中没有出现内存问题。

作者成功地使用openxlsx库将一个数据框按列分割并导出到xlsx文件中,并且没有出现内存问题。

0
0 Comments

问题的出现原因是希望将一个数据框按列分割,并将其导出到xlsx文件中的不同sheet中。然而在使用xlsx包的write.xlsx函数时,发现无法将数据框分别写入不同的sheet中,而是会将后面的数据覆盖前面的数据。

解决方法有两种:

1. 使用write.xlsx函数并设置append=TRUE参数。这样可以在同一个文件中写入多个数据框,并确保每个数据框写入的sheet不会覆盖之前的数据。示例代码如下:

library(xlsx)
write.xlsx(dataframe1, file="filename.xlsx", sheetName="sheet1", row.names=FALSE)
write.xlsx(dataframe2, file="filename.xlsx", sheetName="sheet2", append=TRUE, row.names=FALSE)

2. 使用xlsx包的其他函数,可以更灵活地控制格式和数据框的位置,然后在最后保存工作簿。示例代码如下:

wb = createWorkbook()
sheet = createSheet(wb, "Sheet 1")
addDataFrame(dataframe1, sheet=sheet, startColumn=1, row.names=FALSE)
addDataFrame(dataframe2, sheet=sheet, startColumn=10, row.names=FALSE)
sheet = createSheet(wb, "Sheet 2")
addDataFrame(dataframe3, sheet=sheet, startColumn=1, row.names=FALSE)
saveWorkbook(wb, "My_File.xlsx")

除了以上解决方法,还可以参考链接中给出的一些辅助函数,这些函数可以更方便地添加格式、元数据和其他特性到使用xlsx包创建的电子表格中。

最后,有一些用户提到他们切换到openxlsx包,因为它更直观,并且避免了对Java的依赖。还有一些用户提到在使用以上解决方法时,sheet 2会覆盖sheet 1的数据,这可能是由于某些用户环境的问题。对于这种情况,可以尝试其他用户提供的解决方法。

0