2017-01-12 1 views
0

Die Eingaben werden im Format "iris $ Petal.Width - iris $ Species" angezeigt. Bei ausgewählten Eingaben werden die zu teilenden Daten und die Iris $ Petal.Width allein zum Filtern der gesamten Daten verwendet Daten. Beispiel: ausgewählte Werte sind wie im Bild. userIputglänzend mit selectizeInput zum Aufbau der dynamischen Datenausgabe

Versuchen Sie, Daten wie dplyr :: Filter (Iris, Iris% $ Petal.Width in% c ('0,2', '0,3', '0,1', '0,6', '1,4')) Wie um das c ('0.2', '0.3', '0.1', '0.6', '1.4') dynamisch zu bilden.

Dieses Beispiel zum besseren Verständnis genommen, tatsächlich sind die Eingänge in A001 - Description1, A002 - Description2 Format. Müssen Sie A001, A002 zu c ('A001', 'A002') machen.

mit folgenden Code versucht:

## run in interactive R sessions 
if (interactive()) { 

    ui <- fluidPage(

    selectizeInput('ipdesc', label='Selector', 
        choices = as.list(c(unique(paste(iris$Petal.Width,iris$Species,sep = " - ")))), 
        multiple = TRUE, 
        options = list(maxItems = 5) 
    ), 
    p("Select Codes (Max 5), then press 'Go'"), 
    actionButton("go", label = "Go"), 
    tableOutput("selected") 
) 

    server <- function(input, output) { 
    # 
    output$selected <- renderTable({ 
     filterdata() 
    }) 

    filterdata <- eventReactive(input$go,{ 
     x=c() 
     cnt = length(input$ipdesc) 
     for (i in 1:cnt){ 
     if (i != cnt) { 
      x[i] = cat(sapply(strsplit(input$ipdesc[i], " - "), "[", 1),",") 
     } 
     else 
     {x[i] = cat(x[1],sapply(strsplit(input$ipdesc[i], " - "), "[", 1))} 

     } }) 


    # 

    } 

    shinyApp(ui, server) 

} 

Antwort

0

Dieses eine shinyapps oder shinyjs Frage ist nicht wirklich alles, was Sie wissen müssen, ist, wie eine Zeichenfolge aufgeteilt übereinstimmen Teil davon zu einem Datenrahmen zu entsprechen. Da Sie mit Datenrahmen arbeiten, ist strsplit() möglicherweise nicht die eleganteste Lösung.

Wie Sie dplyr erwähnen, gebe ich Ihnen eine tidyverse Option:

Try separate() vom tidyr Paket. convert = TRUE bedeutet, dass die resultierenden Spalten wenn möglich automatisch in numeric/integer/logical konvertiert werden sollen.

library(dplyr) 
library(tidyr) 

input <- "1.8 - versicolor" 

temp <- data.frame(input = input) %>% 
      tidyr::separate(input, c("Petal.Width", "Species"), 
          sep = " - ", convert = TRUE) 
filtered <- dplyr::filter(iris, iris$Petal.Width %in% temp$Petal.Width) 

filtered Ausgang:

# Sepal.Length Sepal.Width Petal.Length Petal.Width Species 
# 1   5.9   3.2   4.8   1.8 versicolor 
# 2   6.3   2.9   5.6   1.8 virginica 
# 3   7.3   2.9   6.3   1.8 virginica 
# 4   6.7   2.5   5.8   1.8 virginica 
# 5   6.5   3.0   5.5   1.8 virginica 
# ... 

Beachten Sie, dass diese sowohl versicolor Spiele und virginica.

In Kombination mit Ihrem glänzenden Skript:

library(shiny) 
if (interactive()) { 

    ui <- fluidPage(
    selectizeInput('ipdesc', label='Selector', 
        choices = as.list(c(unique(paste(iris$Petal.Width,iris$Species,sep = " - ")))), 
        multiple = TRUE, 
        options = list(maxItems = 5) 
    ), 
    p("Select Codes (Max 5), then press 'Go'"), 
    actionButton("go", label = "Go"), 
    tableOutput("selected") 
) 

    server <- function(input, output) { 

    output$selected <- renderTable({ 
     filterdata() 
    }) 

    filterdata <- eventReactive(input$go, { 
     temp <- data.frame(input = input$ipdesc) %>% 
     tidyr::separate(input, c("Petal.Width", "Species"), sep = " - ", convert = TRUE) 

     iris %>% 
     dplyr::filter(iris$Petal.Width %in% temp$Petal.Width) 

    })  
    } 

    shinyApp(ui, server) 

} 
+0

Dank Steffi LaZerte, kommt Ihr Ansatz sehr nahe, mein Problem zu lösen. Die Eingänge sind im Format "A00 - Description". Daher gibt es beim Ausführen eine Fehlermeldung wie "Fehler: Operationen sind nur für numerische, logische oder komplexe Typen möglich". Irgendein Vorschlag bitte. – SPS

+0

Sie sollten das Argument 'convert = TRUE' weglassen. Dieses Argument sagt 'separe()', um das Ergebnis in numerisch zu konvertieren (im obigen Fall). Aber in Ihrem Fall werden Sie mit 'A00' und 'Description' enden, von denen keine numerisch (noch logisch oder komplex) sind, was vermutlich der Grund ist, warum Sie diesen Fehler erhalten. –

Verwandte Themen