Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将R中数据框中的数据附加到已存在的Excel工作表中_R_Excel_Xlsx - Fatal编程技术网

如何将R中数据框中的数据附加到已存在的Excel工作表中

如何将R中数据框中的数据附加到已存在的Excel工作表中,r,excel,xlsx,R,Excel,Xlsx,我已经在R中创建了几十个数据框,并希望将它们全部附加到Excel文件中的一个工作表中 以下是我为寻找答案而查看的两个页面(我没有10个声誉,因此无法粘贴我访问过的所有四个网页URL): 作者说:“您还可以使用addDataFrame函数的startRow和startCol参数将数据帧添加到工作表中的特定起始位置。” 以下是建议的代码: workbook.sheets workbook.test addDataFrame(x = sample.dataframe, sheet = workboo

我已经在R中创建了几十个数据框,并希望将它们全部附加到Excel文件中的一个工作表中

以下是我为寻找答案而查看的两个页面(我没有10个声誉,因此无法粘贴我访问过的所有四个网页URL):

作者说:“您还可以使用addDataFrame函数的startRow和startCol参数将数据帧添加到工作表中的特定起始位置。” 以下是建议的代码:

workbook.sheets workbook.test addDataFrame(x = sample.dataframe, sheet = workbook.test,
   row.names = FALSE, startColumn = 4) # write data to sheet starting on line 1, column 4
saveWorkbook(workbook.sheets, "test.excelfile.xlsx") # and of course you need to save it.
基于这一建议,这是我在RStudio中的尝试:

addDataFrame(df_fl1, sheet = "AllData2.xlsx", startRow = 712)
这是R的输出: 工作表$Get工作簿中出错:$运算符对于原子向量无效

我也尝试过这个页面:

但是,如果要将数据帧写入已存在的文件,可以执行以下命令:

write.xlsx(df,
"", 
sheetName=“数据框”
append=TRUE)
write.xlsx(df_fl3,“AllData2.xlsx”,sheetName=“Salinity1”,append=TRUE)

我尝试了这个代码,它重写了工作表中已经存在的数据。如何将数据框中的数据追加到Excel工作表中?

追加到现有Excel工作表有点麻烦。相反,将所有Excel数据文件读入R,在R中合并,然后将单个合并数据框写入新的Excel文件(如果不需要将数据写入Excel工作簿,则写入csv文件)。请参阅下面的代码,了解简单方法和困难方法

简单方法:在
R
中完成所有工作,并在末尾保存单个组合数据帧

例如,如果所有Excel数据文件都在当前工作目录中,并且每个Excel文件中的第一个工作表都包含数据,则可以执行以下操作:

library(xlsx)

# Get file names
file.names = list.files(pattern="xlsx$")

# Read them into a list
df.list = lapply(file.names, read.xlsx, sheetIndex=1, header=TRUE)
然后将它们组合成单个数据帧并写入磁盘:

df = do.call(rbind, df.list)

write.xlsx(df, "combinedData.xlsx", sheetName="data", row.names=FALSE)
困难方法:将连续数据框附加到预先存在的Excel工作表中

创建要写入Excel的数据帧列表(如上所述,在实际用例中,您将把数据文件读入R中的列表)。我们将使用内置的
iris
数据框进行说明:

df.list = split(iris, iris$Species)
要将每个数据框写入单个Excel工作表,请首先创建Excel工作簿和要写入数据的工作表:

wb = createWorkbook()
sheet = createSheet(wb, "data")

# Add the first data frame
addDataFrame(df.list[[1]], sheet=sheet, row.names=FALSE, startRow=1)
现在使用循环附加所有剩余的数据帧。每次递增
startRow
,以便将下一个数据帧写入正确的位置

startRow = nrow(df.list[[1]]) + 2    

for (i in 2:length(df.list)) {

  addDataFrame(df.list[[i]], sheet=sheet, row.names=FALSE, col.names=FALSE, 
               startRow=startRow)

  startRow = startRow + nrow(df.list[[i]])

  }
保存工作簿:

saveWorkbook(wb, "combinedData.xlsx")

addDataFrame
如果您希望在Excel工作表的各个部分中布局各种汇总表,并使其看起来更美观,那么它非常有用。但是,如果您只是将原始数据合并到一个数据文件中,我认为在R中完成所有工作,然后在最后将合并后的数据框写入Excel工作表(或csv文件)会容易得多。

要绕过您提到的原始错误:

工作表$Get工作簿中出错:$运算符对于原子向量无效

您可以尝试以下方法:

wb <- loadWorkbook("<name and extension of your existing file>")
addDataFrame(df,getSheets(wb)$<sheetname>, startRow = 712)
saveWorkbook(wb, <filename>)

wb将
XLConnect
作为一个
appendWorksheet
函数来完成这项工作。简单方法:这段代码似乎与我从文本文件创建数据帧时所做的类似:
file.names=list.files(pattern=“xlsx$”)#将它们读入一个列表df.list=lappy(file.names,read.xlsx,sheetIndex=1,header=TRUE)
数据文本文件位于多个不同的文件夹中,因此我宁愿使用我的数据帧,而不是将所有这些文件移动到一个文件夹中。我与数据帧一起位于工作目录中,但R无法识别它们:“is.data.frame(x)中的错误:未找到对象'dataframe.RData'艰难的方式:它起作用了,但对我的数据帧不起作用。艰难的方式:我尝试了
df2.list=split(“dataframe.RData”,“dataframe2.RData”)
然后创建了工作表并使用addDataFrame()和保存工作簿。但这只会创建一个数据框名称位于工作表左上角的电子表格。我也尝试过使用数据的平面文件而不是数据框。我还将尝试此页面上的addWorkSheet代码:[链接]以获得“简易方法”:从任何给定目录,您都可以通过执行以下操作获取所有子目录中的所有文件,包括完整路径:例如,
list.files(pattern=“xlsx”,full.names=TRUE,recursive=TRUE)
。对于困难的方法,
split
函数只是创建数据帧的示例列表以供说明。对于实际数据,无论是简单的方法还是困难的方法,您都会以相同的方式读取文件。此外,split函数的代码似乎不正确。第一个参数应该是数据帧(即,已作为全局环境中的对象加载到R中),第二个参数应该是该数据帧中的分类列。@eipi10在您的硬方法中,您使用了for循环来添加每个数据帧。是否有一种方法可以将for循环替换为lappy?
wb <- loadWorkbook("<name and extension of your existing file>")
addDataFrame(df,getSheets(wb)$<sheetname>, startRow = 712)
saveWorkbook(wb, <filename>)