Shiny R使用data.frame列基于下拉列表分配变量,并将该变量传递给以图方式进行可视化显示]]

问题描述 投票:0回答:1

我从数据库中得到一个data.frame,并且我正在尝试创建一个R Shiny Web App,可以在其中从两个下拉菜单中进行选择(基于我data.frame中行和列的组合值),将这些变量传递给图]

假设我的数据框中有此数据:

# |User|N00   |Percentage|N01 |
  |----|------|----------|----|
  |35  |2229  | 4.46830  |918 |
  |37  |153   | 0.00307  |0   |
  |39  |1557  | 0.03120  |0   |
  |41  |4997  | 0.10014  |0   |
  |42  |1     | 0.00002  |0   |
  |44  |12221 | 0.24490  |0   |
  |46  |5     | 0.00010  |0   |
  |50  |342   | 0.00685  |0   |
  |51  |123   | 0.00246  |0   |
  |56  |2     | 0.00004  |1   |
  |57  |0     | 0.00000  |0   |
  |60  |62275 |1.24796   |2799|

[我想做的是在“用户”列中有一个下拉菜单,在“标题”中有第二个下拉菜单,因此我可以选择“用户”和“标题”,然后返回适当的结果(data.frame)。] >

所以我需要从两个下拉列表的组合中进行如下操作:

select(data_to_choose_from, User, values)[data_to_choose_from$id==values2, ]

其中value是第一个下拉菜单(用户)的结果,values2是第二个下拉菜单(标题)的结果,如下所示:

enter image description here

因此,当我选择用户“ 35”和列“ N00”时,我想获得此结果:

 |User|N00   |
 |----|------|
 |35  |2229  |

我得到此结果后,我想将“ N00”列中的数字传递给某个变量,并使用该数字创建量规,例如看起来像这样(这只是示例,我必须对其进行调整更多“清晰”):

enter image description here

我有这个:

library(shiny) #Load libraries
library(plotly) #Load libraries

data_to_choose_from <- data.frame(a) #Assign data from data.frame(a), which is data i have from my DB to new variable

ui <- fluidPage(
    sidebarLayout(
        sidebarPanel(
            selectizeInput("User", "User", choices=NULL, selected=NULL), #First dropdown
            selectizeInput("Metrics", "Metrics", choices=NULL, selected=NULL), #Second dropdown
            textOutput("values"), #Show what did i choose in the first dropdown
            textOutput("values2"), #Show what did i choose in the second dropdown
            tableOutput("table") #Output tha table based on my choices in dropdowns
        ),
        mainPanel(
            plotlyOutput('p') #Plot a visualization base on data from output table
        )
    )
)

server <- function(input, output, session) { #First dropdown, reference to my data.frame
    updateSelectizeInput(session, 'User',
                         choices = data_to_choose_from$User,
                         server = TRUE
    )
    updateSelectizeInput(session, 'Metrics',
                         choices = names(data_to_choose_from), #Second dropdown, reference to my data.frame
                         server = TRUE
    )

    output$values <- renderText({(input$User)}) #Output of first dropdown

    output$values2 <- renderText({(input$Metrics)}) #Output of second dropdown

    output$values3 <- as.vector(select(data_to_choose_from, values)[data_to_choose_from$id==values2, ]) #Put this as vector to plot_ly

    output$table <- select(data_to_choose_from, id, values)[data_to_choose_from$id==values2, ] #Filtered data.frame output based on original data

    output$plot <- renderPlotly( #Here i would like to create the plot to render in mainpanel
    p <- plot_ly(
        type = "indicator",
        mode = "gauge+number+delta",
        value = i,
        title = list(text = values2, font = list(size = 24)),
        delta = list(reference = 400, increasing = list(color = "RebeccaPurple")),
        gauge = list(
            axis = list(range = list(NULL, 500), tickwidth = 1, tickcolor = "darkblue"),
            bar = list(color = "darkblue"),
            bgcolor = "white",
            borderwidth = 2,
            bordercolor = "gray",
            steps = list(
                list(range = c(0, values3), color = "cyan"),
                list(range = c(values3, 400), color = "royalblue")),
            threshold = list(
               line = list(color = "red", width = 4),
                thickness = 0.75,
                value = values3 + 100))) %>%
        layout(
            margin = list(l=20,r=30),
            paper_bgcolor = "lavender",
            font = list(color = "darkblue", family = "Arial")))
}
shinyApp(ui, server)

不幸的是,这不起作用,我想我的代码从头开始是错误的,我尝试遵循文档,但我有点迷茫。。

我正在尝试学习R,并且我对一般情况下变量和Shiny R的工作方式感到困惑,如果有任何不清楚的地方,请帮助我了解我的所有信息将大为有用。将编辑我的问题,谢谢

我有一个来自数据库的data.frame,并且我正在尝试创建一个R Shiny Web App,我可以在其中从两个下拉菜单中进行选择(基于data.frame中行和列的组合值)。 ..

有多个问题。

[执行output$values <- renderSomething({......})时,无法通过调用......来访问values(甚至无法调用output$values)。

用[替换output$values3

  values3 <- reactive({
    req(input$User, input$Metrics)
    data_to_choose_from[data_to_choose_from$User == input$User, input$Metrics]
  })

现在您可以通过调用values3获得values3()的值。因此,将values3中的renderPlotly替换为values3()。并将text = values2替换为text = input$Metrics

req(input$User, input$Metrics)行表示input$Userinput$Metrics必须可用。这样可以避免启动应用程序时出错,因为这些变量仅在updateSelectizeInput动作后才可用。

如果要渲染表,请使用renderTable

  output$table <- renderTable({
    req(input$User, input$Metrics)
    subset(data_to_choose_from, User == input$User, select = c("User", input$Metrics)) 
  })

您执行output$plot <- renderPlotly({ p <- plot_ly(.......) }),因此在ui中应为plotlyOutput("plot"),而不是plotlyOutput("p")p <-没有用,您可以将其删除。

现在在plot_ly中执行value = i,但未定义i。我不知道您打算做什么(我对这种情节不熟悉)。

r shiny plotly
1个回答
0
投票

有多个问题。

© www.soinside.com 2019 - 2024. All rights reserved.