使用闪亮的文本输入和 dplyr 过滤数据框中的行

Bla*_*las 3 r shiny dplyr shinydashboard

我试图在闪亮的应用程序上使用文本输入小部件来过滤数据框中的行,但我无法让它工作。

数据集

df1<-data.frame (Name=c("Carlos","Pete","Carlos","Carlos","Carlos","Pete","Pete","Pete","Pete","Homer"),Sales=(as.integer(c("3","4","7","6","4","9","1","2","1","9"))))
Run Code Online (Sandbox Code Playgroud)

用户界面

shinyUI(fluidPage(
titlePanel("Sales trends"),titlePanel("People score"),

sidebarLayout(sidebarPanel(

  textInput("text", label = h3("Text input"), value = "Enter text..."),

  numericInput("obs", "Number of observations to view:", 3),

  helpText("Note: while the data view will show only the specified",
           "number of observations, the summary will still be based",
           "on the full dataset."),

  submitButton("Update View")
),

mainPanel(
  h4("Volume: Total sales"),
  verbatimTextOutput("volume"),

  h4("Top people"),
  tableOutput("view")
))))
Run Code Online (Sandbox Code Playgroud)

服务器

library(shiny)
library (dplyr)
df1<-data.frame (Name=c("Carlos","Pete","Carlos","Carlos","Carlos","Pete","Pete","Pete","Pete","Homer"),Sales=(as.integer(c("3","4","7","6","4","9","1","2","1","9"))))
shinyServer(function(input, output) {
output$value <- renderPrint({ input$text })
datasetInput <- reactive({
switch(input$dataset,df1%>% filter(Name %in% "input$text")%>% select(Name, Sales)%>% arrange(desc(Sales)))
})
output$volume <- renderPrint({
dataset <- datasetInput()
sum(dataset$Sales)
})})
Run Code Online (Sandbox Code Playgroud)

Tho*_*s K 5

正如aosmith指出的那样,您需要删除引号以进行过滤。其次,您应该使用==而不是%in%filter(). 第三,您会switch()在其他情况下使用(请继续阅读?switch),但在这里您不需要它。

server.R应该是这样的:

library(shiny)
library(dplyr)
df1 <- data_frame(Name = c("Carlos","Pete","Carlos","Carlos","Carlos","Pete",
                         "Pete","Pete","Pete","Homer"),
                  Sales = c(3, 4, 7, 6, 4, 9, 1, 2, 1, 9))

shinyServer(function(input, output) {
  datasetInput <- reactive({
    df1 %>% filter(Name == input$text) %>% arrange(desc(Sales))
  })
  output$volume <- renderPrint({
    dataset <- datasetInput()
    dataset$Sales
  })
})
Run Code Online (Sandbox Code Playgroud)