我是 Shiny App 的新手,我想嘗試一些非常簡單的事情,但我很難做到。
我有一個看起來像這樣的資料:
Proyecto <- c("ECO","ECO", "ECO", "ECO", "FECHIC", "FECHIC")
Encuesta <- c(1, 2, 1,1, 1, 1)
Visita <- c(1,2,3, 1, 1, 1)
acep <- (1,1,1,1,1,1)
covid_date <- c("2020-06-20", "2020-12-21", "2021-05-02", "2020-06-22", "2020-06-20", "2020-12-21")
covid_fechic <- c(2,1,2,2,2,NA)
BASE_COMPLETA <- tibble(Proyecto, Encuesta, Visita, acep, covid_date, covid_fechic)
我想創建一個可以作為輸入的應用程式:
- 專案(選擇輸入)
- 恩奎斯塔(選擇輸入)
- 訪問(選擇輸入)
- 資料集中的任何變數,例如 covid_date 或 covid_fechic (textInput)
有了這些輸入,我想創建一個表格,首先按 Proyecto、Encuesta 和 Visita 進行過濾,然后僅選擇我選擇的變數,對其進行排列、分組并以一種可以向我展示不同選項的方式進行匯總。變數以及有多少人選擇這些選項中的任何一個。
沒有 Shiny 應用程式是這樣的:
BASE_COMPLETA %>%
filter(Proyecto == "FECHIC") %>%
filter(Encuesta == 1) %>%
filter(Visita == 1) %>%
filter(acep == 1) %>%
select(covid_fechic) %>%
arrange(covid_fechic) %>%
group_by(covid_fechic) %>%
summarise(n = n()) %>%
print()
但是當我在我的 Shiny 應用程式中嘗試這個時,它似乎只在選擇部分作業,我無法獲得排列、分組或總結。
是不是因為我不能多次使用相同的輸入變數?
這是我非常簡單的閃亮代碼:
lista_proyecto <- c("FECHIC", "ECO")
lista_encuestas <- c(1, 2)
lista_visitas <- c(1, 2, 3)
ui <- fluidPage(
theme = shinytheme("flatly"),
h1(id="big-heading", "Encuesta COVID"),
tags$style(HTML("#big-heading{color: #092F87;}")),
sidebarLayout(
sidebarPanel(
width = 12,
selectInput("Proyecto",
label = h4("Proyecto:"),
choices = lista_proyecto),
selectInput("Encuesta",
label = h4("Encuesta:"),
choices = lista_encuestas),
selectInput("Visita",
label = h4("Ronda:"),
choices = lista_visitas),
textInput("Variable",
label = h4("Variable de interés"),
value = "covid_date")
),
mainPanel(
fluidRow(DTOutput("Tabla3"))
)
)
)
server <- function(input, output) {
output$Tabla3 <- renderDT({
BASE_COMPLETA %>%
filter(Proyecto == input$Proyecto) %>%
filter(Encuesta == input$Encuesta) %>%
filter(Visita == input$Visita) %>%
filter(acep == 1) %>%
select(input$Variable) %>%
arrange(input$Variable) %>%
group_by(input$Variable) %>%
summarise(n = n()) %>%
print()
}, options = list(bFilter=0))
}
shinyApp(ui = ui, server = server)
任何人都可以幫助我了解問題出在哪里以及我該怎么做才能使其有效?提前致謝!。
uj5u.com熱心網友回復:
知道來自輸入的值是字符,我們可以使用特殊構造.data[[]]來使用字串選擇變數。
output$Tabla3 <- renderDT({
BASE_COMPLETA %>%
filter(Proyecto == input$Proyecto) %>%
filter(Encuesta == input$Encuesta) %>%
filter(Visita == input$Visita) %>%
filter(acep == 1) %>%
select(.data[[input$Variable]]) %>%
arrange(.data[[input$Variable]]) %>%
group_by(.data[[input$Variable]]) %>%
summarise(n = n()) %>%
print()
}, options = list(bFilter=0))
或者我們也可以使用 function get()。
有關更多資訊,請參閱使用 dplyr 編程。
應用代碼:
library(shiny)
library(DT)
library(shinythemes)
Proyecto <- c("ECO", "ECO", "ECO", "ECO", "FECHIC", "FECHIC")
Encuesta <- c(1, 2, 1, 1, 1, 1)
Visita <- c(1, 2, 3, 1, 1, 1)
acep <- c(1, 1, 1, 1, 1, 1)
covid_date <- c("2020-06-20", "2020-12-21", "2021-05-02", "2020-06-22", "2020-06-20", "2020-12-21")
covid_fechic <- c(2, 1, 2, 2, 2, NA)
BASE_COMPLETA <- tibble(Proyecto, Encuesta, Visita, acep, covid_date, covid_fechic)
lista_proyecto <- c("FECHIC", "ECO")
lista_encuestas <- c(1, 2)
lista_visitas <- c(1, 2, 3)
ui <- fluidPage(
theme = shinytheme("flatly"),
h1(id = "big-heading", "Encuesta COVID"),
tags$style(HTML("#big-heading{color: #092F87;}")),
sidebarLayout(
sidebarPanel(
width = 12,
selectInput("Proyecto",
label = h4("Proyecto:"),
choices = lista_proyecto
),
selectInput("Encuesta",
label = h4("Encuesta:"),
choices = lista_encuestas
),
selectInput("Visita",
label = h4("Ronda:"),
choices = lista_visitas
),
textInput("Variable",
label = h4("Variable de interés"),
value = "covid_date"
)
),
mainPanel(
fluidRow(DTOutput("Tabla3"))
)
)
)
server <- function(input, output) {
output$Tabla3 <- renderDT(
{
BASE_COMPLETA %>%
filter(Proyecto == input$Proyecto) %>%
filter(Encuesta == input$Encuesta) %>%
filter(Visita == input$Visita) %>%
filter(acep == 1) %>%
select(.data[[input$Variable]]) %>%
arrange(.data[[input$Variable]]) %>%
group_by(.data[[input$Variable]]) %>%
summarise(n = n()) %>%
print()
},
options = list(bFilter = 0)
)
}
shinyApp(ui = ui, server = server)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/397801.html
