【问题标题】:contingency table doesn't return the right result in r shiny with pickerInput列联表没有在 r 中使用 pickerInput 返回正确的结果
【发布时间】:2020-11-29 20:50:06
【问题描述】:

我正在尝试使用函数 table() 和 pickerInput 在 r shiny 创建一个列联表。虽然我没有任何消息错误,但我在 r shiny 上获得的结果是不正确的。我试过的代码和数据如下:

#install.packages("shinydashboard")                   
library(shinydashboard)
#install.packages("DT")
library(DT)


data<-data.frame(Products=c("A","B","B","B","A","B","A","A","B"),
                 Clients=c("c1","c1","c2","c3","c3","c3","c3","c3","c3"))

ui<-fluidPage(
  box(title="croisement client/produit",status = "info", solidHeader = TRUE, width = 12,
      fluidRow(pickerInput('select_Product','Choisir les produits', choices=as.character(unique(data$Products)), selected = "A", options = list(`actions-box` = TRUE),multiple =T),
                      DT::dataTableOutput("tab_prod"))
      )
)


server <- function(input, output,session) {
  table1<-function(data){
    data_intermediaire<-data[(data$Products==input$select_Product),]
    objet_etudie<-as.data.frame.matrix(table(data_intermediaire$Product,data_intermediaire$Clients))
    return(objet_etudie)
  }
  
  output$tab_prod<-DT::renderDataTable({datatable(table1(data))})
  
}

shinyApp(ui = ui, server = server)


当我使用 pickerInput 选择产品“A”时,这是正确的结果,但是当我选择产品 A 和产品 B 时,结果是:

    C1  C2
A   1   2
B   1   2

应该是这样的:

    C1  C2
A   1   3
B   1   4

当我使用此代码使用没有 r 的表时:

data<-data.frame(Products=c("A","B","B","B","A","B","A","A","B"),
                 Clients=c("c1","c1","c2","c3","c3","c3","c3","c3","c3"))
data_intermediaire<-data[(data$Products=="A")|(data$Products=="B"),]
objet_etudie<-as.data.frame.matrix(table(data_intermediaire$Product,data_intermediaire$Clients))

,我有正确的答案。所以这让我觉得也许我并没有真正理解 pickerInput 是如何工作的......

提前感谢您的建议。

【问题讨论】:

    标签: r shiny contingency


    【解决方案1】:

    应该这样做:

    library(shinydashboard)
    library(shinyWidgets)
    library(DT)
    library(shiny)
    
    data<-data.frame(Products=c("A","B","B","B","A","B","A","A","B"),
                     Clients=c("c1","c1","c2","c3","c3","c3","c3","c3","c3"))
    
    ui<-fluidPage(
        box(title="croisement client/produit",status = "info", solidHeader = TRUE, width = 12,
            fluidRow(pickerInput('select_Product','Choisir les produits', choices=as.character(unique(data$Products)), selected = "A", options = list(`actions-box` = TRUE),multiple =T),
                     DT::dataTableOutput("tab_prod"))
        )
    )
    
    
    server <- function(input, output,session) {
        
        table1 <- function(data,select_Product){
            data_intermediaire<-data[(data$Products %in% select_Product),]
            objet_etudie<-as.data.frame.matrix(table(data_intermediaire$Product,data_intermediaire$Clients))
            return(objet_etudie)
        }
        
        output$tab_prod <- DT::renderDataTable({
            
            datatable(table1(data,input$select_Product))
            
        })
        
    }
    
    shinyApp(ui = ui, server = server)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2014-09-13
      • 2012-08-01
      • 2014-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多