Как объединить предварительно загруженный набор данных с выбранной пользователем фактор-переменной? - PullRequest
2 голосов
/ 09 мая 2019

Мой вопрос:

Я объединяю выбранную пользователем непрерывную переменную в моем предварительно загруженном наборе данных с помощью переменной фактора, выбранной пользователем в функции подачи.

Я получаю следующую ошибку.Кажется, что мои входные переменные не распознаются как имена столбцов в статистической функции.

Warning in mean.default(X[[i]], ...) :
  argument is not numeric or logical: returning NA

Как агрегировать набор данных с использованием реактивных входов?

Справочная информация:

Я работаю над блестящим приложением.

Одна из вещей, которую я хочу сделать, это представить таблицу данных средних значений выбранной пользователем непрерывной переменной с коэффициентомпеременная, которую также выбирает пользователь.

Я пытаюсь добиться этого с помощью 1) разрешения пользователю сначала выбрать эти переменные, а затем 2) «свертывания» данных, заданных факторной переменной, с помощью агрегатафункция.

Мой код:

library(shiny)
library(DT)

# Load necessary data ----------------------
data(CO2)

# User interface -----------------------------

ui <- fluidPage(

        titlePanel("Calculate Your Own Mean."),


        sidebarPanel(
                selectInput(inputId = "indicator", label = "Indicators:", 
                            choices = names(CO2)[4:length(names(CO2))], 
                            selected = "conc"),
                selectInput(inputId = "group", label = "Disaggregate by:",
                            choices = names(CO2)[1:3], 
                            selected = "Plant"),
                width = 2),

        mainPanel(
                DT::dataTableOutput("table")
        )

)

# Server -----------------------------
server <- function(input, output) {

        meanData <-reactive({

                aggregate(input$indicator ~ input$group,
                          data = CO2,
                          FUN = mean)
        })

        output$table <- DT::renderDataTable({
                data <- meanData()
                data
        })



}

shinyApp(ui = ui, server = server)

Ожидаемый результат должен отображать таблицу со средствами выбранной пользователем переменной по выбранной пользователем групповой переменной.

Большое спасибо за помощь!

1 Ответ

1 голос
/ 09 мая 2019

Значения, поступающие из 'input', являются символьными. Таким образом, его необходимо преобразовать в формулу с paste

aggregate(as.formula(paste0(input$indicator,  " ~ ", input$group)),
                      data = CO2,
                      FUN = mean)

Воспроизводимый пример CO2

aggregate(as.formula(paste("uptake", "~", "Plant")), 
              data = CO2, FUN = mean)
#   Plant   uptake
#1    Qn1 33.22857
#2    Qn2 35.15714
#3    Qn3 37.61429
#4    Qc1 29.97143
#5    Qc3 32.58571
#6    Qc2 32.70000
#7    Mn3 24.11429
#8    Mn2 27.34286
#9    Mn1 26.40000
#10   Mc2 12.14286
#11   Mc3 17.30000
#12   Mc1 18.00000

-fullcode

library(shiny)
library(DT)

# Load necessary data ----------------------
data(CO2)

# User interface -----------------------------

ui <- fluidPage(

  titlePanel("Calculate Your Own Mean."),


  sidebarPanel(
    selectInput(inputId = "indicator", label = "Indicators:", 
                choices = names(CO2)[4:length(names(CO2))], 
                selected = "conc"),
    selectInput(inputId = "group", label = "Disaggregate by:",
                choices = names(CO2)[1:3], 
                selected = "Plant"),
    width = 2),

  mainPanel(
    DT::dataTableOutput("table")
  )

)

# Server -----------------------------
server <- function(input, output) {

  meanData <-reactive({

    aggregate(as.formula(paste0(input$indicator,  " ~ ", input$group)),
              data = CO2,
              FUN = mean)
  })

  output$table <- DT::renderDataTable({
    data <- meanData()
    data
  })



}

shinyApp(ui = ui, server = server)

-выход

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...