2015-03-24 3 views
3

Я работаю над небольшим блестящим приложением, которое обеспечит доступ к некоторым общедоступным данным рынка труда. Я относительно простой набор данных в длинном формате, напоминающем экстракт ниже: данныеR: составление списка уникальных значений, используемых в Shiny selectInput

Geography Measure Time Value 
ABC  Measure A 2010 3 
ABC  Measure A 2011 4 
ABC  Measure A 2013 5 
ABC  Measure B 2010 0.2 
ABC  Measure B 2011 4 
DEF  Measure A 2010 4 
DEF  Measure A 2011 8 
DEF  Measure A 2012 7 
DEF  Measure B 2010 8 
DEF  Measure B 2010 7 

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

## Create list of unique measures 
lst.measures <- as.list(unique(dta$Measure)) 

но при попытке ввести полученный список в Shiny ui.R используя код ниже:

# Selection of the available indicators 
    selectInput("selectVariable", label = h3("Select box"), 
       choices = lst.measures, 
       selected = 1) 
), 

Сформированный список не содержит необходимый текст (мера A, мера B) но список номеров, как на рисунке (Я больше меру в своих данных, чем в выборочных данных): Sample List

Я предполагаю, что проблема связана с тем, как структурирован список, в настоящее время

> as.list(unique(dta.nom$Measure)) 
[[1]] 
[1] Measure A 
Levels: Measure A Measure B 

[[2]] 
[1] Measure B 
Levels: Measure A Measure B 

Следовательно, мой вопрос: Как я могу изменить порядок элементов в списке, так что сгенерированный список могут быть переданы в selectInput значимым образом, показывая текстовые значения, соответствующие уникальным значениям выбранного столбца?

ответ

2

Try преобразования dta.nom$Measure в character

dta.nom$Measure = as.character(dta.nom$Measure) 

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

# Create list of unique measures 
#lst.measures <- as.list(unique(dta$Measure)) 
lst.measures <- unique(dta$Measure) 
+0

Большое спасибо, предлагаемое решение работает должным образом. Могу ли я воспользоваться этой возможностью и уточнить, какие значения теперь передаются из 'selectInput'? Как показано на [Блестящем веб-сайте] (http://shiny.rstudio.com/reference/shiny/latest/selectInput.html), 'selectInput' следует структуре' selectInput ("variable", "Variable:", c («Цилиндры» = «Цил», «Передача» = «am»)) 'с переданными значениями' cyl' и 'am', которые будут переданы, если я предоставляю только один список значений ? – Konrad

+1

Конечно, вы можете. Обозначение 'c (« Цилиндры »=« цил »,« Передача »=« am »)' делает параметры selectInput отображаемыми для пользователя как «Цилиндры» и «Передача». Внутренний выбор, который пользователь делает, переводится как «цил» и «am». Важно, конечно, внутренние ценности. Если вы согласны с тем, что пользователь видит имена переменных, а не метки, нет обратной стороны для предоставления только одного вектора. – Pewi

Смежные вопросы