R создает несколько файлов Excel из набора данных на основе условий из другого

У меня есть набор данных с комментариями обратной связи по нескольким критериям из опроса клиентов, проведенного на многих сайтах, где каждая строка представляет один ответ.

Для простоты я упростил исходный набор данных и создал воспроизводимый кадр данных с комментариями только для трех сайтов.

Критерии перечислены в столбцах 4 - 10.

comments = data.frame(RESPONDENT_ID=c(1,2,3,4,5,6,7,8),
             REGION=c("ASIA","ASIA","ASIA","ASIA","ASIA","EUROPE","EUROPE","EUROPE"),
             SITE=c("Tokyo Center","Tokyo Center","Tokyo Center","PB Tower","PB Tower","Rome Heights","Rome Heights","Rome Heights"),
             Lighting=c("Dim needs to be better","","Good","I don't like it","Could be better","","",""),
             Cleanliness=c("","very clean I'm happy","great work","","disappointed","I like the work","","nice"),
             Hygiene=c("","happy","needs improvement","great","poor not happy","nice!!","clean as usual i'm never disappointed",""),
             Service=c("great service","impressed","could do better","","","need to see more","cant say","meh"),
             Punctuality=c("always on time","","loving it","proper and respectful","","","punctual as always","delays all the time!"),
             Efficiency=c("generally efficient","never","cannot comment","","","","","happy with this"),
             Motivation=c("always very motivated","driven","exceeds expectations","","poor service","ok can do better","hmm","motivated"))

У меня есть второй набор данных, который содержит три нижних критерия оценки для каждого из трех сайтов.

bottom = data.frame(REGION=c("ASIA","ASIA","EUROPE"),
             SITE=c("Tokyo Center","PB Tower","Rome Heights"),
             BOTTOM_1=c("Lighting","Cleanliness","Motivation"),
             BOTTOM_2=c("Hygiene","Service","Lighting"),
             BOTTOM_3=c("Motivation","Punctuality","Cleanliness"))                 

Моя цель:

1) Из comments кадр данных, для каждого SITEЯ хотел бы отфильтровать bottom фрейм данных и извлеките комментарии для трех нижних критериев только для сайта.

2) Исходя из этого извлечения, для каждого уникального SITEЯ хотел бы создать файл Excel с тремя листами, каждый из которых назван в честь трех нижних критериев для данного сайта.

3) Каждый лист будет содержать список комментариев, извлеченных для этого конкретного сайта.

4) Я бы хотел, чтобы все файлы Excel сохранялись в формате:

РЕГИОН_САЙТ_Comments2017.xlsx

Желаемый конечный результат:

3 файла Excel (или столько файлов, сколько имеется уникальных сайтов), каждый файл Excel имеет три вкладки, названные в соответствии с их тремя нижними критериями, и каждый лист со списком комментариев, соответствующих заданному критерию для этого сайта.

Например, один из трех сгенерированных файлов будет выглядеть так:

  • Имя файла будет ASIA_TokyoCenter_Comments2017.xlsx
  • Файл будет содержать 3 листа: "Освещение","Гигиена" и "Мотивация" (на основе трех нижних критериев для этого сайта)
  • Каждый из этих листов будет содержать свои соответствующие комментарии на уровне сайта.

Моя методология:

Я пытался с помощью for петля на comments кадр данных и фильтрация bottom датафрейм для каждого сайта в списке.

Затем с помощью write.xlsx функция от xlsx пакет для генерации файлов Excel, с sheetName Аргумент установлен для каждой из трех нижних цитрий на сайт.

Однако я не могу добиться желаемых результатов. Я искал в Stackru похожие решения, но пока ничего не нашел.

Любая помощь с этим будет высоко ценится!

1 ответ

Решение

Вероятно, это можно лучше отформатировать... Но для каждого уровня в Регионе и на сайте, для каждого "дна" мы извлекаем каждую независимую комбинацию и записываем в файл.

bottom <- sapply(bottom, as.character) # Get out of factors.
sp <- split(comments, comments$REGION) # Split data into a list format for ease.
for(i in unique(bottom[,1])){
   for(j in unique(bottom[,2])){
       x <- sp[[1]][sp[[i]][,3]==j,]
       y <-  x[,colnames(x)%in%bottom[bottom[,1]==i& bottom[,2]==j,3:5]]
       for(q in colnames(y)){
       if(nrow(x) > 0) {
         write.xlsx(x=y[,q],
                    file=paste(i,j, 'Comments2017.xlsx', sep='_'),
                    sheetName=q, append=T)
       }
     }
   }
 }

Это то, что ты искал?

Другие вопросы по тегам