【发布时间】:2016-08-17 00:38:24
【问题描述】:
在闪亮的谷歌组上问过这个问题,但没有任何帮助:我正在努力解决如何在下面的代码中将输入开关传递给 dplyr 的 group_by_。
我在下面的非 MRE 中将相关代码的两部分加粗(即第 9:11 和 24 行)。
实际上,如果用户在 UI 中选择“每天”,则结果分组应该是第 24 行中的 group_by(year = year(my_date), month = month(my_date), day = day(my_date),或者删除 ANY分组,因为数据已经是每天了。
选择“每月”,应该产生 group_by(year = year(my_date), month = month(my_date))
“每年”,应该产生 group_by(year = year(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)
【问题讨论】:
-
您可以使用
do.call提供动态参数列表。