2017-09-15 5 views
1

J'ai créé une trame de données (df) et l'ai rempli avec des nombres dans la première ligne en brillant R. Maintenant, j'aimerais voir l'index de chaque élément variable des données encadrer dans une liste déroulante quand je télécharge un fichier. En d'autres termes, je voudrais utiliser l'index pour sélectionner des éléments plutôt que les noms de colonnes. Je sais que cela peut sembler bizarre mais j'ai vraiment besoin d'aide pour ça. Mon exemple de code est ci-dessous:Sélection des données d'une liste déroulante dans R

**ui.R** 

shinyUI(fluidPage(
titlePanel(""), 
sidebarLayout(
sidebarPanel(
    fileInput("file", "Upload the file", 
      accept=c('txt', 'text files', '.txt')), 
    tags$hr(style="padding:0px;margin:0px"), 
    selectInput(inputId = "table_no", label = "Select table", choices = "Pending Upload"), 

), 


**server.R** 
shinyServer(function(input, output, session){ 

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

trial <- 1:5 
df <- data.frame(matrix(trial, ncol = length(trial), nrow = 1, byrow = TRUE), stringsAsFactors = FALSE) 
colnames(df) <- paste("Table",trial) 
+0

Pouvez-vous fournir un [exemple reproductible] (http: // stackoverflow. com/questions/5963269/comment-faire-un-grand-r-reproductible-exemple)? – jsb

Répondre

0

Vous pouvez utiliser l'index au lieu des noms de colonnes de la même façon que vous pouvez sous-ensemble des indices de colonne dans R. La seule différence brillante est que la valeur de selectInput est une chaîne si vous devez utiliser as.numeric().

flux de travail simple:

  1. Peupler la selectInput avec des indices de colonne à l'aide du nombre de colonnes: 1:ncol(data())
  2. Sous-ensemble un data.frame utilisant data()[, as.numeric(input$table_no)]

je l'ensemble de données de l'iris à des fins de présentation. Cela fonctionnera également avec une valeur réactive.

Exemple:

library(shiny) 

ui <- fluidPage(
    selectInput("table_no", "", choices = 1:ncol(iris)), 
    tableOutput("tbl") 
) 

server <- function(input, output, session) { 
    output$tbl <- renderTable({ 
    index <- as.numeric(input$table_no) 
    colname <- colnames(iris)[index] 

    out <- data.frame(iris[, index]) 
    colnames(out) <- colname 

    out 
    }) 
} 

shinyApp(ui, server) 

également que Samuel a fait remarquer, assurez-vous de vérifier comment créer un exemple reproductible: How to make a great R reproducible example?