【问题标题】:writing data frames into multiple excel file将数据框写入多个excel文件
【发布时间】:2019-05-10 06:54:40
【问题描述】:

我有以下形式的数据框:

    name_1 name_2 col_1 col_2 col_3
 [1,] a     d      1     4     7  
 [2,] b     e      2     5     8  
 [3,] c     f      3     6     9  

我想选择列 name_2 与列 1,2 和 3 中的每一列,并将它们写入 3 个不同工作表中的一个 excel 文件中。

换句话说,我想在我的 excel 文件的第一张表中有列“name_2”和“col_1”,在第二张表中有列“name_2”和“col_2”,在第三张表中有列“name_2”和“col_3” .

我正在使用这个for循环如下

for(i in 2:5){
  df <- data.frame(my file)
  df <- df[,c(2,i+1)]
  write.xlsx(x = df, file = "/pathtofolder/excel.xlsx", sheetName = "column_name",append=TRUE, row.names = T, col.names = T)
}

但是最终的 excel 文件被最后一个 df 覆盖了。

你知道我该怎么做吗?

谢谢

【问题讨论】:

    标签: r excel dataframe for-loop dplyr


    【解决方案1】:

    试试这个:

    library(openxlsx)
    
    wb <- createWorkbook("/pathtofolder/excel.xlsx")
    
    for(i in 2:4){
      addWorksheet(wb, sheetName = colnames(df)[i+1])
      writeData(wb = wb, sheet = colnames(df)[i+1], x = df[,c(2,i+1)], colNames = F)
    }
    
    saveWorkbook(wb,"/pathtofolder/excel.xlsx", overwrite = T)
    

    如果 Excel 文件已存在,请使用 loadWorkbook 而不是 createWorkbook

    【讨论】:

    • 感谢您的帮助。我可以用你的代码创建 excel 表。我的真实数据有问题。列的名称超过 31 个字符,它抱怨工作表名称不能大于 31 个字符。如果工作表的名称是 sheet1、sheet2 等,那也没关系。你能帮我解决这个问题吗?谢谢
    • 您可以创建一个名称向量以用作工作表名称。 (sheetNames = c("Sheet1", "Sheet2",..etc),然后通过将colnames(df)[i+1] 替换为sheetNames[i-1] 来引用它们(i-1,因为 i 从 2 开始。
    • 您也可以使用sheetNames = paste0("Sheet",1:10)生成名称
    猜你喜欢
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多