Блестящий: динамическое подмножество данных на основе ввода пользовательского столбца

У меня есть блестящее приложение, которое позволяет пользователю разбить фрейм данных, выбрав имя столбца из раскрывающегося списка и присвоив ему значение. В приведенном ниже фрагменте df1 - это фрейм данных, и если пользователь выбирает «страну» из раскрывающегося списка и вводит «UK» в текстовое поле, временный df, temp_dat должен содержать только значения UK. По какой-то причине, которую я не могу понять, говорится, что было возвращено 0 строк из 3 столбцов. Кто-нибудь может мне с этим помочь? Заранее спасибо.

library(shinydashboard)
ui = dashboardPage(dashboardHeader(),
                   dashboardSidebar(),
                   dashboardBody(uiOutput("subset_check1"), uiOutput("subsetbox1‌​")))

server = function(input, output, session)
{
  names = c("Jane", "Doe", "Job", "Right")
  emp_id = c(1000, 1001, 1002, 1003)
  country = c("UK", "UK", "UK", "US")
  df1 = data.frame(names, emp_id, country)
  file1_cols = colnames(df1)
  output$subset_check1 = renderUI(checkboxInput(
    "subcheck1",
    "Would you like to subset this dataset with a condition?"
  ))
  observe({
    if (!is.null(input$subcheck1))
    {
      if (input$subcheck1 == "TRUE")
      {
        #print("box was checked")
        output$subsetbox1 = renderUI(flowLayout(
          selectInput(
            "subsetbox1sel",
            "Select column:",
            choices = c(file1_cols),
            multiple = T
          ),
          textInput("subsetbox1text", "Enter value")
        ))
        observe({
          if (!is.null(input$subsetbox1sel))
          {
            if (!is.null(input$subsetbox1text))
            {
              cols_sel1 = as.character(input$subsetbox1sel)
              vals_sel1 = as.character(input$subsetbox1text)
              temp_dat = df1[df1$cols_sel1 == vals_sel1, ]
              print(temp_dat)
            }
          }
        })
      }
    }
  })
} 

person rookieJoe    schedule 29.09.2016    source источник
comment
Я даже пробовал: subset (df1, cols_sel1 == vals_sel1) безрезультатно. Я не могу понять, что делаю неправильно. Когда я печатаю cols_sel1, я вижу страну и vals_sel1, я вижу UK как символы. Почему тогда у temp_dat все еще нет ожидаемых данных.   -  person rookieJoe    schedule 30.09.2016
comment
К вашему сведению: чтобы сделать код работоспособным, мне пришлось добавить library(shinydashbard) и изменить код пользовательского интерфейса на ui=dashboardPage(dashboardHeader(), dashboardSidebar(), dashboardBody(uiOutput("subset_check1"),uiOutput("subsetbox1"))).   -  person R Yoda    schedule 30.09.2016
comment
Извинения. Обновлен вопрос, чтобы отразить это.   -  person rookieJoe    schedule 30.09.2016


Ответы (1)


В настоящее время во фрейме данных нет столбца с именем cols_sel1. Но вы намереваетесь передать его строковое буквальное значение. Следовательно, не используйте квалификатор доллар $, а строку для ссылки на столбец (т. Е. Используйте последний из нижеприведенных), тем более что этот cols_sel1 зависит от выбора пользователя:

df$col
df['col']

Так что просто настройте строку temp_dat на:

temp_dat = df1[df1[cols_sel1]==vals_sel1,]
person Parfait    schedule 29.09.2016
comment
@rookieJoe Пожалуйста, примите этот ответ, потому что он работает как шарм - person R Yoda; 30.09.2016
comment
Действительно, это работает как шарм! Большое спасибо @Parfait. - person rookieJoe; 30.09.2016