0

我有一个嵌套的for loop情况,我正在循环几个 Excel 工作表,应用几个函数,从每个工作表生成一个 data.frame并将所有这些写回一个的工作簿,其工作表名称与原始工作簿相同。

目前,新工作簿中的工作表名称是正确的,但要data frames保持相互覆盖,以便每张工作表都具有相同的data frame. 我怎样才能让每个data frame人都写到各自的 excel 表中?

library(xlsx)
library(agricolae)

#Read all worksheets in one file
read_excel_allsheets <- function(filename) {
 sheets <- readxl::excel_sheets(filename)
 x <-    lapply(sheets, function(X) readxl::read_excel(filename, sheet = X))
 names(x) <- sheets
 x
  }

mysheets <- read_excel_allsheets("Loop_help.xls")`

for (i in 1:length(mysheets)){  #loop through sheets in workbook

file<-as.data.frame(mysheets[i])

  for(i in 2:ncol(file)){    #loop through columns in sheets

if(var(file[,i]) > 0){   #exclude columns that are all zeros

#create data frame (df)  
#do stuff

}
  #dostuff

  }

  #do more stuff

  n<-excel_sheets("Loop_help.xls") #sheet names

  for (i in 1:length(mysheets)) {#write new sheets to excel
    if (i == 1)
      write.xlsx(df, file="Loop.Help.xls", sheetName = n[i])
    else write.xlsx(df, file="Loop.Help.xls", sheetName = n[i],
                    append = TRUE)       
    }
}
4

1 回答 1

0

感谢@Parfait 引导我回答这个问题。

我不仅在那里有多余的东西,而且当我需要使用不同的字母 ( )时,我在两个循环中都for loop调用了。ik

这是最终代码:

for (k in 1:length(mysheets)){#loop through sheets in workbook
  file<-as.data.frame(mysheets[k]) 

  for(i in 2:ncol(file)){#loop through columns in sheets

if(var(file[,i]) > 0){#exclude columns that are all zeros

  #create data frame (df)
  #do stuff
  }
  }
  #do more stuff

  n<-excel_sheets("Loop_help.xls") #sheet names

          if (k == 1)
      write.xlsx(df, file="Loop.help.xls", sheetName = n[k])#write first sheet
    else write.xlsx(df, file="Loop.help.xls", sheetName = n[k],
                    append = TRUE) #append additional sheets

  }
于 2016-07-13T01:31:42.147 回答