2017-03-31 6 views
1

Ich versuche, eine App zu machen, die nach der Auswahl des Benutzers den Datenrahmen der Daten subsetting. Danach möchte ich einen neuen Datenrahmen mit eindeutigen Werten von col1 abd und den neuen Datenrahmen erstellen, die dem vorhandenen Datenrahmen als neue Spalten hinzugefügt werden, abhängig von der Wahl des Benutzers (wie von einer langen Form der Daten, die sie breit machen). Irgendwelche Gedanken ??? meine Daten-Set ist, dassAppend Datenrahmen auf einem vorhandenen Datenrahmen in glänzend

col1<-rep(c(1:4),3) 
col2<-c('a','b','c','a','b','c','a','b','c','a','b','c') 
col3<-c(1,2,3,NA,NA,14,15,NA,NA,20,21,22) 
col4<-c(NA,NA,1,2,3,14,15,20,21,22,NA,NA) 
df<-data.table(col1,col2,col3,col4) 



# Define UI for application that draws a histogram 
ui <- fluidPage(

    # Application title 
    titlePanel("Old Faithful Geyser Data"), 

    selectInput('Ind', 'Index',choices = c(unique(df$col2))), 
    dataTableOutput('Table') 
) 
# Define server logic required to draw a histogram 
server <- function(input, output) { 



dfsel<-reactive({dfnew<-subset(df,col2==input$Ind) 
dfnew 
}) 
output$Table<-renderDataTable(dfsel()) 

} 

# Run the application 
shinyApp(ui = ui, server = server) 

was ia bin versucht zu achive, wenn zuerst der Benutzer ‚a‘

die Ergebnisse dieser

col1 col2 col3 col4 
    1 a  1 
    2 a  20  22 
    3 a  15  15 
    4 a    2 

dann, wenn der Benutzer c der wählt neuer Datenrahmen wird

col1 col2 col3 col4 col2 col3 col4 
    1 a  1    c    21 
    2 a  20  22  c  14  14 
    3 a  15  15  c  3  1 
    4 a    2  c  22 

und so weiter

012 sein
+2

Was ist Ihr Problem? –

+0

Ich möchte in der Dataset-Datei, die ich erstelle einfügen jedes Mal, wenn der Benutzer eine andere Eingabe wählen, fügen Sie die entsprechende Teilmenge auf der dfsel. Ein Problem ist, dass die Spaltennamen gleich sind und ich sie nicht einfach anhängen kann. Wie reaktiv kann ich dann die Spaltennamen ändern und die neuen Werte anhängen? – Aleha

+0

Sie möchten der angezeigten Tabelle Zeilen hinzufügen, wenn der Benutzer Teilmengen auswählt? –

Antwort

1

Ok, ich denke ich verstehe was du willst. Das glaube ich.

Ich habe die folgenden Änderungen an Ihrem Beispiel

  • hat ein neues Datatable (rv$dfnew) als reactiveValues ​​Spur unserer Datentabelle zu halten, wie es
  • die Anzeige geändert wächst die aktuell ausgewählte Teil zu zeigen, Der Datenrahmen sowie die wachsende dfnew Tabelle
  • Hinzugefügt eine Zählvariable, die an die Spalten angehängt wird, während wir fortfahren, um sie alle einzigartig zu halten.
  • Ein actionButton doAppendCols hinzugefügt, um die Spalten anzufügen. Hier

ist der Code:

library(shiny) 
library(data.table) 
col1<-rep(c(1:4),3) 

col2<-c('a','b','c','a','b','c','a','b','c','a','b','c') 
col3<-c(1,2,3,NA,NA,14,15,NA,NA,20,21,22) 
col4<-c(NA,NA,1,2,3,14,15,20,21,22,NA,NA) 
df<-data.table(col1,col2,col3,col4) 

# Define UI for application that draws a histogram 
ui <- fluidPage(

    # Application title 
    titlePanel("Append Columns"), 

    selectInput('Ind', 'Index',choices = c(unique(df$col2))), 
    actionButton("doAppendCols","Append Columns"), 
    h2("Selected Data"), 
    dataTableOutput('selTable'), 
    h2("New Table"), 
    dataTableOutput('newTable') 
) 
# Define server logic required to draw a histogram 
server <- function(input, output) { 

    rv <- reactiveValues(dfnew=NULL,count=0) 

    observeEvent(input$doAppendCols,{ 
    rv$count <- rv$count+1 
    dfs <- dfsel() 
    # add a running number as suffix to column names to make the columns unique 
    newsuffix <- paste0(".",rv$count) 
    ncols <- ncol(dfs) 
    names(dfs)[2:ncols] <- paste0(names(dfs)[2:ncols],newsuffix) 
    if(is.null(rv$dfnew)){ 
     rv$dfnew <- dfs 
    } else { 
     rv$dfnew <- merge(rv$dfnew,dfs,by="col1") 
    } 
    }) 

    dfsel<-reactive({ 
    df<-subset(df,col2==input$Ind) 
    df <- df[order(df$col1),] 
    }) 
    output$selTable<-renderDataTable(dfsel()) 
    output$newTable<-renderDataTable(rv$dfnew) 

} 

# Run the application 
shinyApp(ui = ui, server = server) 

Und hier ist das Beispiel für die Ausgabe:

enter image description here

+0

danke !!! Yeah das war genau was ich versuchte zu tun und ich hatte Probleme mit dem Namen der Spalten! Danke!!! – Aleha

Verwandte Themen