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)
}
}
}
}
Это то, что ты искал?