在闪亮的谷歌群上问过这个问题,我还没有帮助:我正在努力将输入切换传递给dplyr的group_by_,在下面的代码中。
我将相关代码的两部分加在下面的不那么MRE中(即第9:11和24行)。
有效地,如果用户在UI中选择“每日”,则生成的分组应为group_by(第24行中的year = year(my_date),month = month(my_date),day = day(my_date),或者删除ANY分组数据已经是每天。
选择“每月”,应该产生group_by(年=年(my_date),月=月(my_date))
“annual”,应该产生group_by(年=年(my_date))
我欢迎关于我的代码/结构如何组织的元建议/批评。
谢谢
library(shiny)
library(dplyr)
library(lubridate)
ui <- fluidPage(
dateInput("start", label = "start date", value = "2010-01-01"),
dateInput("end", label = "end date", value = "2020-01-01"),
selectInput("grouping_freq", label = "Granularity",
choices = list("daily" = 1,"monthly" = 2, "Yearly" = 3),
selected = 2),
tableOutput("my_table")
)
server <- function(input, output) {
df <- reactive({ data_frame(my_date = seq(input$start, input$end, by = 'day')) }) ## 10 years of daily data
df2 <- reactive({ df() %>% mutate(dummy_data = cumsum(rnorm( nrow( df() ) ))) })
output$my_table <- renderTable({
df2() %>% group_by(year = year(my_date), month = month(my_date)) %>%
summarise(dummy_data = sum(dummy_data), my_date = as.Date(min(my_date)))
})
}
shinyApp(ui = ui, server = server)
答案 0 :(得分:1)
您可以使用selectInput
中选择的值来创建传递到group_by_
的公式列表,dplyr::group_by
是使用标准评估的group_list <- switch(input$grouping_freq,
list(yr=~year(my_date), mn=~month(my_date), dy=~day(my_date)),
list(yr=~year(my_date), mn=~month(my_date))
list(yr=~year(my_date)))
版本。
group_list <- if (input$grouping_freq == 1) {
list(yr=~year(my_date), mn=~month(my_date), dy=~day(my_date))
} else if (input$grouping_freq == 2) {
list(yr=~year(my_date), mn=~month(my_date))
} else if (input$grouping_freq == 3) {
list(yr=~year(my_date))
} else {
list()
}
或者如果您更喜欢if语句,
group_list
然后您可以将renderTable
传递到output$my_table <- renderTable({
df2() %>%
group_by_(.dots=group_list) %>%
summarise(dummy_data = sum(dummy_data), my_date = as.Date(min(my_date)))
})
表达式
ungroup
我不确定你的意思是“删除任何分组,因为数据已经是每天。”但是,如果数据可能已经分组,则可以在group_list
中应用分组之前使用~
功能删除任何组。
修改:忘记在列表元素中加入<GlobalNamingResources>
<Resource name="properties/global" auth="Container" type="java.util.Properties" />
</GlobalNamingResources>
,以便正确评估。