从全局环境中选择特定的数据框。

12 浏览
0 Comments

从全局环境中选择特定的数据框。

我很惊讶地发现没有简单的方法可以将多个数据表导出到Excel文件的多个工作表中。我尝试了xlsx包,似乎它只能写入一个工作表(覆盖旧工作表);我还尝试了WriteXLS包,但它一直给我报错...我的代码结构如下:按设计,每次迭代,输出的数据表(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

问题的出现原因:用户在使用R语言中的writexl包时遇到了一个错误,错误提示为“Argument x must be a data frame or list of data frames”,即x参数必须是一个数据框或数据框列表。用户之前尝试使用openxlsx包来写入多个工作表,但由于无法在工作环境中安装rtools而无法成功安装该包。因此,用户转而尝试使用writexl包,但在使用过程中遇到了这个错误。

解决方法:根据用户的反馈,该问题可以通过确保列表中的对象为数据框来解决。用户可以使用以下方法来选择特定的数据框,然后将其作为参数传递给write_xlsx函数:

sheets <- list("sheet1Name" = sheet1, "sheet2Name" = sheet2)
write_xlsx(sheets, "path/to/location")

这样,用户就可以成功地将多个数据框写入Excel文件中,而无需安装rtools或Java。

文章整理如下:

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

有一位用户发现,与之前的建议相比,这个库更好、更快(使用开发版本时):

library(writexl)
sheets <- list("sheet1Name" = sheet1, "sheet2Name" = 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

问题的原因是用户想要从全局环境中选择特定的数据框,然后将它们导出到一个Excel工作簿的不同工作表中。他们希望能够使用openxlsx库来实现这个目标,因为它可以在一个工作簿中导出多个数据集到多个工作表中,并且相比于xlsx库,openxlsx库不依赖于Java库。

解决方法是使用openxlsx库的write.xlsx函数,可以将数据框列表写入到单独的工作表中,同时使用列表名称作为工作表名称。用户可以按照以下代码进行操作:

require(openxlsx)
list_of_datasets <- list("Name of DataSheet1" = dataframe1, "Name of Datasheet2" = dataframe2)
write.xlsx(list_of_datasets, file = "writeXLSX2.xlsx")

其他用户也提到了openxlsx库的优点,如它可以处理首行的R编号,而且它的执行速度比较快。一些用户还提到了他们在使用xlsx库时遇到的内存问题,并推荐使用openxlsx库来避免这些问题。另外,有用户提到他们希望能够自动创建数据框并在Excel工作簿中创建多个工作表,这可能可以通过使用dplyr包的group_by函数来实现。

总结起来,用户可以使用openxlsx库的write.xlsx函数来从全局环境中选择特定的数据框,并将它们导出到一个Excel工作簿的不同工作表中。这样可以更方便地处理大量的数据,并且避免内存问题。

0
0 Comments

问题的原因是使用xlsx包在同一个文件中写入多个数据框时,如果不设置append=TRUE,会导致后面的数据框覆盖前面的数据框。

解决方法是在写入每个数据框时,设置不同的sheetName,并且在后面的数据框中添加append=TRUE选项。另外,可以使用openxlsx包来避免java依赖问题,并且提供更直观的语法。

下面是一个示例代码,演示了如何使用xlsx包和openxlsx包在同一个文件中写入多个数据框,并生成不同的工作表:

# 使用xlsx包
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)
# 使用openxlsx包
library(openxlsx)
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包添加格式、元数据和其他特性到电子表格中。

同时,如果想要移除第一行中的行名,可以在写入数据框时添加row.names=FALSE选项。

根据用户的反馈,使用xlsx包的方法可能会导致后面的工作表覆盖前面的工作表。这可能与使用的包版本、操作系统等因素有关。如果遇到这个问题,可以尝试使用openxlsx包或其他用户提供的解决方法。

0