2016-07-12 21 views
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)  
    } 
} 
+0

FYI:我知道这是一个非常奇怪的问题,但我很愿意把它清理干净,如果我能找到一个解决方案,以便它可以为其他用户有用在将来。现在我认为最好包括所有东西...... –

+0

最后用'write.xlsx','objects'被创建在哪里? – Parfait

+0

哎呀!先前尝试的残留。将尽快改变。 –

回答

0

感谢@Parfait带领我回答这个问题。

我不仅在这里有一个多余的for loop,而且当我需要使用不同的字母(k)时,我在两个循环中调用了i

下面是最终代码:

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 

    } 
+0

如果我想将它保存在我的wd以外的其他位置,我将如何添加到文件路径中? – jesstme

+0

我不确定,对不起。 –