在Shiny中子集数据帧

时间:2018-04-09 17:38:08

标签: r shiny

如果我使用fileInput从Shiny导入数据集,我怎么能以反应形式创建它,我可以创建导入数据帧的子集并最终在子集化数据帧的不同行上执行计算?我可以将子集化的数据帧存储为reactiveValues(),然后在反应场景之外使用它们吗?

我将如何完成类似以下代码的操作,这些代码将在普通的R脚本中成功运行?

df <- read.table(file.choose(), header=TRUE, sep=",")
attach(df)
df <- df[, c(1, 50:75)]
df[1] <- time

我知道我可以使用fileInput完成以下操作,我只是不确定如何在闪亮的内容中对这样的内容进行子集化并使它们可用于像 renderPlot和其他人。 reactivereactiveValues是否是实现此目标的最佳策略?

1 个答案:

答案 0 :(得分:0)

这是你要找的东西吗?

library(shiny)
ui <- fluidPage(
  titlePanel("Uploading Files"),
  sidebarLayout(sidebarPanel(
    fileInput(
      "file1",
      "Choose CSV File",
      multiple = F,
      accept = c("text/csv", "text/comma-separated-values,text/plain", "text")
    ),
    uiOutput("selectbox")
  ),
  mainPanel(tableOutput("contents")))
  )
server <- function(input, output) {
  data <- reactive({
    req(input$file1)
    df <- read.csv(file = input$file1$datapath,
             header = T,
             sep = "\t")
  })

  output$selectbox <- renderUI({
    colnam <- colnames(data())
    selectInput("colsel",
                "Columns Selected",
                c("Please select" = "", colnam),
                multiple = T)
  })

  output$contents <- renderTable({
    data()[, c(req(input$colsel))]
  })
}

shinyApp(ui, server)