我正在使用Shiny来接收用户的txt文件。文件组成完全取决于用户 - 文件没有设置标头。
data_vals <- reactive({
file1 <- input$file1
if (is.null(file1))return(NULL)
read.table(fill=TRUE,file=input$file1$datapath, header=TRUE, colClasses =
"factor")})
从这个文件中,我从用户提交的头文件中创建一个下拉列表:
observe({
req(input$file1)
dsnames <- names(data_labels())
cb_options <- list()
cb_options[dsnames] <- dsnames
output$choose_filt1<- renderUI({
selectInput("filt1", "Filter Level 1", cb_options)
})
})
然后,显示列表中唯一项目的复选框,供用户取消选择。
observe({
filt1_data <- data_labels()[,input$filt1]
filt1_uni <- unique(filt1_data)
output$inCheckboxGroup1 <- renderUI({
checkboxGroupInput("inCheckboxGroup1", "Filter Level 1 Options:",
choices=filt1_uni,
selected=filt1_uni)
})
})
我想使用某种类型的子集来按列过滤data_vals(即输入$ filt1)和选中的框(输入$ inCheckboxGroup1)。我不确定如何做到这一点,因为子集(data_vals,%input $ inInckboxGroup1中的NAME%)正在寻找NAME作为列标题,而不是看作用户选择的输入。
我试图使用:
subset(data_vals, input$inCheckboxGroup1 %in$ input$inCheckboxGroup1)
但是,这不会产生表格(它是空白的)。我还使用了subset(data_vals, Column1Header %in% input$inCheckboxGroup1)
,它有效,所以我知道它不是代码的复选框部分。
是否可以按照我描述的方式使用子集,还是有其他工具可供使用?
答案 0 :(得分:0)
我认为您可以通过不使用<select>
<option> Daniel </option>
<option> Adam </option>
<option> Charlie </option>
<option> Brad </option>
</select>
来解决您的问题,因为您的列名是变量。请参阅以下示例:
subset
所以在你的情况下你可以使用:
A = 1
B ='am'
# This does not work
mtcars2 = subset(mtcars, B %in% A)
# This works
mtcars2 = mtcars[mtcars[,B] %in% A,]
希望这有帮助!