Использование множественного ввода от Shiny в Reshape2 dcast () - PullRequest
0 голосов
/ 24 мая 2018

Используя ссылку из Используя вход Shiny Widget в Reshape Cast () , я могу создать динамическую сводную таблицу с помощью Shiny, используя переменную из одной строки.

Однако, когда яжелая создать несколько столбцов слоя строки, я обнаружил, что второй или третий объект не может быть найден.Я попытался распечатать формулу, которая кажется правильной.Например, если в Shiny были выбраны «vs» и «hp», то формула стала «vs + hp ~ gear», что кажется правильным.Но появляется ошибка «объект« hp »not found».

Не могли бы вы помочь мне в этом?Спасибо!

Пользовательский интерфейс:

library(shiny)
library(dplyr)
library(reshape2)
library(DT)

ui <- fluidPage(
  headerPanel("Summary Table"),
  sidebarPanel(selectInput("row", "Row variable", names(mtcars), selected = "vs", multiple = T),
               selectInput("col", "Column variable", names(mtcars), selected = "gear")),
  mainPanel(DT::dataTableOutput('table'))
)

Сервер:

server <- function(input, output) {

  output$table <- renderDataTable({

    formula <- as.formula(paste(paste(input$row, collapse = "+"), "~", input$col))
    print(formula)

    car0 <- mtcars %>% 
      group_by_(input$row, input$col) %>% 
      summarize(n = n_distinct(cyl)) %>% 
      dcast(formula, value.var = "n")   

    datatable(car0)

  })
}

shinyApp(ui, server)

1 Ответ

0 голосов
/ 24 мая 2018


Как-то так?

library(shiny)
library(dplyr)
library(reshape2)
library(tidyr)
library(DT)
ui <- fluidPage(
  headerPanel("Summary Table"),
  sidebarPanel(selectInput("row", "Row variable", names(mtcars), selected = "vs", multiple = T),
               selectInput("col", "Column variable", names(mtcars), selected = "gear")),
  mainPanel(DT::dataTableOutput('table'))
)

server <- function(input, output) {

  output$table <- renderDataTable({

    car0 <- mtcars %>% 
      select(input$row,input$col,cyl)%>%
      group_by_at(., vars(input$row, input$col))%>%
      summarize(n = n_distinct(cyl))%>%
      tidyr::spread(input$col,n)


    datatable(car0)

  })
}

shinyApp(ui, server)

для формулы и reshape2

library(shiny)
library(dplyr)
library(reshape2)
library(tidyr)
library(DT)
ui <- fluidPage(
  headerPanel("Summary Table"),
  sidebarPanel(selectInput("row", "Row variable", names(mtcars), selected = "vs", multiple = T),
               selectInput("col", "Column variable", names(mtcars), selected = "gear")),
  mainPanel(DT::dataTableOutput('table'))
)

server <- function(input, output) {

  output$table <- renderDataTable({

    formula <- as.formula(paste(paste(input$row, collapse = "+"), "~", input$col))
    print(formula)

    car0 <- mtcars %>% 
      select(input$row,input$col,cyl)%>%
      group_by_at(., vars(input$row, input$col))%>%
      summarize(n = n_distinct(cyl))%>%
      #tidyr::spread(input$col,n)
      dcast(formula, value.var = "n")  


    datatable(car0)

  })
}

shinyApp(ui, server)
...