2016-07-12 1 views
0

У меня есть вложенная for loop ситуации, где я зацикливание через несколько преуспевании рабочих листы, применяя несколько функций, создавая одного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', где создается« объекты »? – Parfait

+0

Упс! Остаток от предыдущих попыток. Будет изменяться как можно скорее. –

ответ

0

Спасибо @Parfait за то, что вы привели меня к этому ответу.

Не только у меня есть лишний for loop, но я звонил i в оба цикла, когда мне нужно было использовать другую букву (k).

Вот окончательный код:

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

Я не уверен, извините. –

Смежные вопросы