【发布时间】:2019-10-31 06:25:42
【问题描述】:
我有这种格式的数据:
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
我已经为 Category、Subcategory 和 User 编写了 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')
choices 参数中的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 列。例如,如果用户为子类别和用户输入“全部”,为类别输入“A”,则输出数据表应如下所示:
Category Subcategory User Count1 Count2
A All All 7700 5500
或
Category Count1 Count2
A 7700 5500
我可以为此编写 if-else 条件,但在实际数据中有 6-8 个过滤器,我想知道是否有更简单的方法来聚合数据,而无需为所有聚合组合编写 if-else 控件(例如聚合所有类别和子类别的新用户或聚合所有类别、子类别和用户等)。
【问题讨论】:
-
我想我已经找到了解决方案,确认后会发布。