重新整理我的问题,我试图用selectinput = c(“ col_1”,“ col_2”,“ col_3”,“ col_4”,“ col_5”)反应性地合成数据帧
我的数据框看起来像这样
日期。 Store_ID。销售部。股票 。 ETC
我需要能够对同一存储中的所有数据进行汇总,并由用户选择不同的列。
以mtcars数据框为例,我的目标是拥有一个这样的表
SelectInput =显示
圆柱-显示
4-总和(每4个缸显示)
6-总和(每6个气缸显示)
8-总和(每8个圆柱显示)
SelectInput = qsec
圆柱体。 qsec
4。总和(每4缸qsec)
6。总和(每6缸qsec)
8。总和(每8个圆柱每秒钟qsec)
library(shiny)
图书馆(tidyverse)
ui <- bootstrapPage(
selectInput(
"col",
"Column",
colnames(mtcars),
selected = "mpg"),
plotOutput("histCentile", height = 200)
)
server <- function(input, output) {
data <- reactive({
mtcars() %>%
group_by(cyl = cyl) %>%
pull(input$col) %>%
sum()
})
output$histCentile <- renderPlot({
hist(data()$[[input$col]],
main = "Graph",
xlab = "Units",
xlim = range(data()$[[input$col]]),
col = '#00DD00',
border = 'white')
})
}
# Run the application
shinyApp(ui = ui, server = server)
答案 0 :(得分:0)
我不确定您要做什么,但这是一个使用reactive
来基于selectInput
变量过滤数据的可复制示例。
library(shiny)
library(tidyverse)
ui <- bootstrapPage(
selectInput(
"col",
"Column",
colnames(mtcars),
selected = "mpg"),
textOutput("selected_col")
)
server <- function(input, output) {
data <- reactive({
mtcars %>% pull(input$col) %>% sum()
})
output$selected_col <- renderText({
sprintf("The sum of column %s is %f", input$col, data())
})
}
# Run the application
shinyApp(ui = ui, server = server)
说明:在data
中,我们基于input$col
的选择求和来自selectInput
的值。因此,data
是一个无功值,我们在output$selected_col
中显示。
更新后的代码示例存在一些问题:
reactive
块中,您正在汇总数据以给出一个数字。根据单个数字绘制直方图没有任何意义。其次,有一个错字:应该是mtcars
而不是mtcars()
;最后,group_by(cyl = cyl)
是不必要的,因为您以后无需再进行任何分组计算(它也应该是group_by(cyl)
)。reactive
块,因为您可以直接在renderPlot
中进行过滤,但是我想这是个人喜好。以下内容基于selectInput
library(shiny)
library(tidyverse)
ui <- bootstrapPage(
selectInput(
"col",
"Column",
colnames(mtcars),
selected = "mpg"),
plotOutput("histo")
)
server <- function(input, output) {
data <- reactive({
mtcars %>% pull(input$col)
})
output$histo <- renderPlot({
hist(data())
})
}
# Run the application
shinyApp(ui = ui, server = server)
答案 1 :(得分:0)
感谢莫里斯·埃弗斯的帮助和一些研究,我设法做到了自己想做的
library(shiny)
library(tidyverse)
ui <- bootstrapPage(
selectInput(
"col",
"Column",
colnames(mtcars),
selected = "mpg"),
plotOutput("histo")
)
server <- function(input, output) {
data <- reactive({
Graphby <- input$col
with(mtcars,aggregate(qsec,list(cyl=cyl),sum))
aggregate(mtcars[[Graphby]],list(cyl=mtcars$cyl),sum)
})
output$histo <- renderPlot({
hist(data()$x)
})
}
# Run the application
shinyApp(ui = ui, server = server)
它的工作原理是通过合并this之类的数据组来实现交互式直方图 通过选择不同的列以反应的方式。