2016-07-12 3 views
0

複数のExcelワークシートをループしていくつかの関数を適用して単一data.frameを各ワークシートから生成し、 元のワークブックと同じシート名のワークブックに戻ります。forループを使用してExcelシートを修正するために複数のデータフレームを書き込む

現時点では新しい本のシート名は正しいが、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

:ここ

は、最終的なコードである私は、これは非常に特異な問題である知っているが、それは他のユーザーのために役立つことができるように、私は解決策を見つけることができれば、私はそれをクリーンアップすることは非常に喜んで将来は。今のところ私はすべてを含めることが最善だと思った... –

+0

'write.xlsx'の最後に' objects'がどこに作られていますか? – Parfait

+0

おっと!以前の試みからの残り。早急に変更されます。 –

答えて

0

この回答に私を導いてくれてありがとうございます。

私は余分なfor loopを持っていただけでなく、別の文字(k)を使用する必要があるときに、両方のループでiと呼んでいました。 FYI

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

私は確信していません、申し訳ありません。 –

関連する問題