我有超过100个txt文件,这些文件是SQL的输出,覆盖了100个不同的模式和表。文件为表格数据,管道分隔。 每个文本文件中的所有列名都不同。
将文件加载到目录后,我创建了3个不同的符号,根据文件名称分隔文件。例如,x.files< - list.files(pattern =“_ X.txt”)所以我可以将我的“X”文件与其他文件分开。
之后我使用lapply循环遍历这些文件并将“read.csv”转换为变量:x.read< - lapply(x.files,read.csv,sep =“|”,header = TRUE)。
我现在需要做的是将所有这些数据帧(存储在列表中)写回XLSX文件,每个数据帧都有一张表。首选项是这些TXT文件将代表单个工作簿(XLSX文件)中[i]文本文件的工作表。
我在使用'xlsx'和'XLConnect'软件包时遇到了一些问题。即使我将java.parameters分配给-Xmx4000m,它们都会导致JVM内存不足。
我尝试过使用'openxlsx',但我很难弄清楚如何根据list / df的索引创建表单。因此,index [1]将是“Sheet 1”,依此类推。或者,如果工作表名称是实际文件名(SOME_DATA_STORE_SYS_NAME)的名称减去.TXT,因为文件名是(SOME_DATA_STORE_SYS_NAME.X.txt或.P1.txt等),这也没关系。
答案 0 :(得分:2)
这是我经常使用的Excel写出功能的一个非常简单的版本。请注意,您的列表名称必须是唯一的,否则将写入表格。如果您的数据框非常大,这可能不是一个可行的解决方案。
解决方案1使用xlsx
包将Excel工作簿构建到计算机的内存中,然后同时写入所有工作表。
require(xlsx)
eg <- list("one" = data.frame(one = rep(1, 100)),
"two" = data.frame(two = rep(2, 200)))
wb <- createWorkbook()
for (i in seq_along(eg)) {
sheet <- createSheet(wb, names(eg)[i])
addDataFrame(eg[i], sheet)
}
saveWorkbook(wb, "eg.xlsx")
解决方案2使用XLConnect
包,并将数据帧一次写入Excel工作表(对计算机内存的要求较少)。
require(XLConnect)
eg <- list("one" = data.frame(one = rep(1, 100)),
"two" = data.frame(two = rep(2, 200)))
for (i in seq_along(eg)) {
writeWorksheetToFile(file = "eg.xlsx", data = eg[i], sheet = names(eg)[i])
}