【问题标题】:Filter Reactive Dataset by Text Input按文本输入过滤反应性数据集
【发布时间】:2015-09-15 17:09:56
【问题描述】:

我正在尝试在 Shiny 中创建一个仪表板,用户可以在其中选择月/年并对该时间段执行一些预测分析。在这一点上,我有一些可以运行的东西,我可以使用 fileInput() 调用引入一个反应性数据集。我遇到的问题是按选定的零件号对数据进行子集化。因此,我引入了带有事件日期、零件编号和需求(数据列)的 .csv,现在我想使用选定的零件编号(使用 textInput 作为我的反应值)对数据进行子集化。

data <- reactive({
  file1 <- input$file
  if(is.null(file1)){return()} 
  f = read.csv(file=file1$datapath, header = TRUE, stringsAsFactors = FALSE)
})

上面的代码是我从计算机中读取 .csv 文件的方式。该数据集现在是一个反应性数据集,我可以使用 data() 将其列为表格。

output$table <- renderTable({
  if(is.null(data())){return()}
  "how do I call the f from the above reactive function here?"
})

如果我使用 textInput 框,使用“part”作为指向用户输入内容的指针,如何将 data() 子集化为仅包含与该部件号匹配的行?在常规 R 中,我只需调用 data$partNumber = '7800123489' 并将其作为子集,但我不确定如何使用我使用 Shiny 引入的反应性数据集来做到这一点。

【问题讨论】:

  • 你试过什么失败了?根据您的需要,您可以命名您读入的对象,然后在同一个 reactive 函数调用中通过 input$name_of_textInput 使用 textInput 框创建一个子集。或者只是基于input$name_of_textInputdata() 的子集创建一个新对象...
  • 我没有尝试太多,因为我真的不知道从这里去哪里。不过我明白你的意思。我在主面板textInput("part", "Enter Part Number") 中创建了文本输入,然后是input$part...但我仍然对如何使用该调用对数据进行子集感到困惑?如果我想在 reactive 函数中执行此操作,我应该在哪里调用 input$part
  • datasetname[datasetname$part == input$part,]?
  • 在我的情况下,我的响应式 .csv 输入的数据集名称是 data' and if I add data[data$partNumber == input$part] 到上面函数的末尾,我收到错误 object of type 'closure' is not subsettable .不过,我明白你的逻辑在哪里。
  • 如果你在你的 OP 中的响应式函数中工作,那么你还没有给你的数据集命名......所以当你读入它时命名它,dat = read.csv(...。虽然与您的问题不同,this answer 显示了一个基本示例,该示例在反应函数中使用数据集执行多个步骤。

标签: r csv forecasting shiny


【解决方案1】:

我在另一个 post@aosmith 的帮助下解决了这个问题,感谢大家的帮助。

读入 .csv 文件后,我将其子集化到反应函数中,然后在输出表中调用 data()。我可以在 Part textInput 中输入一个部件号,然后在我选择要读入的文件后,表格中只会填充包含该部件号的值。

在用户界面部分

mainPanel(
  textInput("part", "Enter Part Number"),
  uiOutput("tb")
)

在服务器部分

server <- function(input, output) {
  data <- reactive({
    file1 <- input$file
    if(is.null(file1)){return()} 
    read <- read.csv(file=file1$datapath, header = TRUE, stringsAsFactors = FALSE)
    f <- subset(read, partNumber %in% input$partNumber)
    return(f)
})

 output$table <- renderTable({
    if(is.null(data())){return()}
    data()
})

因此,此代码的关键是读取文件,然后使用来自textInput 的响应使用%in% input$part 创建一个子集f,并将f 返回到data()

【讨论】:

    猜你喜欢
    • 2022-11-28
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 2019-07-17
    • 2011-04-13
    • 2021-05-25
    • 1970-01-01
    • 2020-08-18
    相关资源
    最近更新 更多