Попытка создать цикл для экспорта файлов Excel из списка данных - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть список данных (150 имен учеников + класс + класс), и я пытаюсь создать листы Excel по классу .В настоящее время у меня есть список данных, разбитых по классам, но я не могу экспортировать их в Excel.

IncomingClasses <- split(Students, Students$Class-Course)
classes <- names(IncomingClasses)

for (i in seq(classes)){
    assign(classes[i], IncomingClasses[[i]])
    write.xlsx(IncomingClasses[i], file = paste(i, ".xlsx"))
}

Но я не могу экспортировать.Лучшее полученное сообщение об ошибке:

  • Ошибка в (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE,:аргументы подразумевают различное количество строк: 34, 44, 15, 17, 16, 18

Поскольку я должен иметь разные строки, так как в каждом классе разные ученики ...но он не создаст документ .xlsx.

Пожалуйста, помогите!

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Вы не приводите полностью воспроизводимый пример проблемы, поэтому ее сложно диагностировать, но я вижу как минимум три проблемы.Чтобы получить доступ к разделенным фреймам данных, вы должны использовать [[, а не [, использование seq приведет к нумерованным именам файлов, и вы должны использовать paste0 вместо paste, чтобы избежать вставки пробелав именах файлов.Кроме того, использование assign сбивает с толку.Могу ли я предложить:

for (i in names(IncomingClasses)) {
  write.xlsx(IncomingClasses[[i]], file = paste0(i, '.xlsx'))
}
0 голосов
/ 21 сентября 2018

Допустим, у меня есть этот фрейм данных, инициализированный этими переменными.

student <- c('joe', 'bob', 'foo', 'bar')
class <- c('1', '2', '3', '4')
grade <- c('a', 'b', 'c', 'd')
df <- data.frame(student, class, 

Почему бы не создать временный фрейм данных и сохранить его в файл, с соответствующим подмножеством для записей с правильным классомобозначение?

for (c in unique(df$class)) {
    tdf <- df[df$class == c, ]
    write.csv(tdf, file = paste(c, ".csv"))
}
...