У меня есть данные в этом формате:
Category Subcategory User Count1 Count2
A a New 3000 2000
A a Old 300 200
A b New 4000 3000
A b Old 400 300
B c New 4000 3000
B c Old 600 400
Я кодировал 3 фильтра для категории, подкатегории и пользователя и таблицу выходных данных следующим образом:
selectInput('cat', 'Category', choices = c('All', category)),
selectInput('sub', 'Subcategory', choices = c('All', subcategory)),
selectInput('user', 'User', c('All', 'New', 'Old')),
DT::dataTableOutput('table')
category
и subcategory
в аргументе выбора являются списками. Я могу фильтровать данные таким образом с помощью пользовательских данных:
output$table <- DT::renderDataTable({
if(input$cat == 'All'){data <- data}
else{data <- data[data$Category == input$cat, ]}
if(input$user == 'All'){data <- data}
else{data <- data[data$User== input$user, ]}
if(input$sub == 'All'){data <- data}
else{data<- data[data$Subcategory == input$sub, ]}
})
Проблема, с которой я столкнулся, заключается в том, что мне нужно агрегировать столбцы count , когда пользователь вводит аргумент «Все». ,Например, если пользователь вводит «Все» для подкатегории и пользователя и «А» для категории, таблица выходных данных должна выглядеть следующим образом:
Category Subcategory User Count1 Count2
A All All 7700 5500
или
Category Count1 Count2
A 7700 5500
Я могу написать условия if-else для этого, но в реальных данных есть 6-8 фильтров, и мне интересно, есть ли более простой способ агрегирования данных без записи элементов управления if-else для всех комбинаций агрегации (например, агрегата) Новые пользователи Все Категории и подкатегории или Агрегированы Все Категории, подкатегории и пользователи и т. д.).