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

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

Предположим, что у меня есть data.frame с тремя столбцами. В первом указаны имена моих учеников, во втором — его возраст, а в третьем — его последняя оценка за прошлый тест. Я создал форму, в которой есть ровно три поля ввода для выбора. Первый для выбора имен, второй номер ввода для выбора возраста и последний для выбора его последнего класса. Я хочу, чтобы когда я выбираю имя студента в первом поле, другие поля автоматически заполняли информацию.

Спасибо!


person Elvin Mitchell Toro    schedule 17.04.2017    source источник


Ответы (1)


Я думаю, это то, что вы ищете:

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

autoFillDF <- structure(list(Name = c("ABC", "XYZ", "PQR"), Age = c(30L, 24L, 
27L), Grade = c("A", "B", "D")), .Names = c("Name", "Age", "Grade"
), class = "data.frame", row.names = c(NA, -3L))

ui.R код

shinyUI(fluidPage(
  titlePanel("Auto Fill"),
    sidebarPanel(
      selectizeInput("p1", choices = autoFillDF$Name, selected = NULL, label = 'Name'),
      selectizeInput("p2", choices = NULL, label = 'Age'),
      selectizeInput("p3", choices = NULL, label = 'Grade')

    ),
    mainPanel(
      DT::dataTableOutput('table')
    )
  )
)

сервер.R код

autoFillDF <- read.csv('..../test.csv', stringsAsFactors = FALSE)

shinyServer(function(input, output, session) {

  updateApp <- reactive({
    data <- autoFillDF
    data <- data[data$Name %in% input$p1,]
    updateSelectizeInput(session, 'p2', choices = data$Age, selected = data$Age, server = TRUE)
    updateSelectizeInput(session, 'p3', choices = data$Grade, selected = data$Grade, server = TRUE)

    data
  })

  output$table <- DT::renderDataTable(
    DT::datatable(updateApp()) 
  )

})
person krish    schedule 18.04.2017
comment
Спасибо за идеальный ответ. Реально решает проблему. - person Elvin Mitchell Toro; 19.04.2017
comment
@ElvinMitchellToro, если этот ответ помог решить вашу проблему, рассмотрите возможность отметить его как принятый с помощью галочки под стрелками голосования. - person krish; 19.04.2017