将数据帧转换为selectInput(Shiny)中的选择列表

时间:2015-07-03 10:01:16

标签: r list dataframe shiny

我有一个与下面示例相对应的数据框:

df = data.frame(subject=c("Subject A", "Subject B", "Subject C", "Subject D"),id=c(1:4))

我想将此数据框转换为可在selectInput方便地实现的列表对象:

selectInput("subject", "Subject",
            choices = #my_new_list )

我希望最终用户能够看到选择中的主题列表,并希望selectInput返回相应的数值(id)。 < / p>

如果我试图通过以下方式获取我的清单:

df <- data.frame(lapply(df, as.character),
                         stringsAsFactors = FALSE)
df <- as.list(df)

selectInput下拉菜单显示所有可用选项:

Select Input Preview

我只对列出主题并传递相应的数值感兴趣。

3 个答案:

答案 0 :(得分:6)

使用函数split

my_new_list <- split(df$id, df$subject)
my_new_list
#$`Subject A`
#[1] 1

#$`Subject B`
#[1] 2

#$`Subject C`
#[1] 3

#$`Subject D`
#[1] 4

与函数with一起:

my_new_list <- with(df, split(id, subject))

答案 1 :(得分:1)

对于choices参数,您可以使用doc:

中的命名列表
  

如果列表的元素被命名,那么该名称而不是值   显示给用户

要制作命名列表,您可以尝试:

your_choices <- as.list(df$id)
names(your_choices) <- df$subject

在应用程序中:

selectInput("subject", "Subject",
                choices = your_choices )

答案 2 :(得分:0)

使用setNames,例如:

selectizeInput('x3', 'X3', choices = setNames(state.abb, state.name))

就像在这个示例http://shiny.rstudio.com/gallery/option-groups-for-selectize-input.html

中一样