2017-08-16 3 views
1

So habe ich diesen Datenrahmen ...Auswählen von Zeilen in Datatable-Daten in Shiny aus einer anderen Tabelle zeigen

df1 <- read.table(text=" 
    Project  Counts  Inventory 
     A   25   100 
     B   20   120 
     C   10   50 
",header=TRUE,stringsAsFactors = FALSE) 

und diesen Datenrahmen ....

df2 <- read.table(text=" 
    Project  Sub_Project  Counts  Date 
     A   1    5  2017-05-01 
     A   2    10  2017-05-01 
     A   2    10  2017-06-01 
     B   1    40  2017-05-01 
     B   1    20  2017-06-01 
     B   1    20  2017-07-01 
     B   2    40  2017-05-01 
     C   1    15  2017-05-01 
     C   1    35  2017-06-01 
",header=TRUE,stringsAsFactors = FALSE) 

In glänzenden library(DT) und library(ggplot2) mit Ich mache eine renderDataTable von df1, die es Ihnen ermöglicht, jede Zeile auszuwählen, und wenn jede Zeile ausgewählt ist, beginnt sie, eine andere Datentabelle anzuzeigen. Wenn ich auf eine Zeile in df1 klicke, wird mir die neue Datentabelle, die gerendert wird, eine Untermenge von df2 geben, die nur die Informationen des ausgewählten Projekts anzeigt, die Zählungen zusammenfasst und sie nach Sub_Project organisiert. wie folgt aus (wenn Sie auf Projekt A von df1 klicken waren:

df3 <-read.table(text=" 
    Project  Sub_Project  Counts 
     A   1    5 
     A   2    20 
",header=TRUE,stringsAsFactors = FALSE) 

Die eigentliche Funktionalität von dem, was ich bin versucht, Werke zu tun, ich weiß nur nicht, wie logisch programmieren, was ich will ... hier ist meine ganze app

library(shiny) 
library(shinydashboard) 
library(ggplot2) 
library(DT) 

df1 <- read.table(text=" 
      Project  Counts  Inventory 
       A   25   100 
       B   20   120 
       C   10   50 
       ",header=TRUE,stringsAsFactors = FALSE) 


df2 <- read.table(text=" 
      Project  Sub_Project  Counts  Date 
       A   1    5  2017-05-01 
       A   2    10  2017-05-01 
       A   2    10  2017-06-01 
       B   1    40  2017-05-01 
       B   1    20  2017-06-01 
       B   1    20  2017-07-01 
       B   2    40  2017-05-01 
       C   1    15  2017-05-01 
       C   1    35  2017-06-01 
       ",header=TRUE,stringsAsFactors = FALSE) 



ui <- dashboardPage(
    dashboardHeader(title = 'Dashboard'), 
    dashboardSidebar(), 

    dashboardBody(

tabsetPanel(
    tabPanel('Sequencing', 
      fluidRow(
      column(12, 
        dataTableOutput('project_table'), 
        dataTableOutput('subproject_table')) 
      ) 
     ) 
) 
) 
) 



server <- function(input, output) { 

    output$project_table <- renderDataTable(df1, options = list(pageLength = 10)) 


    output$subproject_table <- renderDataTable({ 
    s = input$project_table_rows_selected 
     if(length(s)) df1[s, , drop=FALSE]}) 
} 

shinyApp(ui, server) 
+0

In der 'df3' scheint die 'counts' 20 aus der Reihe zu kommen, wo 'Project' auf 'df2' steht – akrun

+0

@akrun nein, es ist das Zusammenfassen der Counts aus dem selben Sub_Project in Project A. Es ignoriert also Datumsinformationen und hält 'df1' von Project organisiert und summiert dann die Counts nach ähnlichen Sub_Projects ... – Naji

Antwort

1

ich denke, das ist das, was Sie suchen:

library(shiny) 
library(shinydashboard) 
library(ggplot2) 
library(DT) 

df1 <- read.table(text=" 
        Project  Counts  Inventory 
        A   25   100 
        B   20   120 
        C   10   50 
        ",header=TRUE,stringsAsFactors = FALSE) 


df2 <- read.table(text=" 
        Project  Sub_Project  Counts  Date 
        A   1    5  2017-05-01 
        A   2    10  2017-05-01 
        A   2    10  2017-06-01 
        B   1    40  2017-05-01 
        B   1    20  2017-06-01 
        B   1    20  2017-07-01 
        B   2    40  2017-05-01 
        C   1    15  2017-05-01 
        C   1    35  2017-06-01 
        ",header=TRUE,stringsAsFactors = FALSE) 



ui <- dashboardPage(
    dashboardHeader(title = 'Dashboard'), 
    dashboardSidebar(), 

    dashboardBody(

    tabsetPanel(
     tabPanel('Sequencing', 
       fluidRow(
       column(12, 
         dataTableOutput('project_table'), 
         dataTableOutput('subproject_table')) 
       ) 
    ) 
    ) 
) 
) 



server <- function(input, output) { 

    output$project_table <- renderDataTable(df1, options = list(pageLength = 10)) 


    output$subproject_table <- renderDataTable({ 
    s = input$project_table_rows_selected 
    project <- unique(df1[s,c("Project")]) 
    df2[df2$Project %in% project, ]}) 
} 

shinyApp(ui, server) 

Ich habe project neues Objekt erstellt, die einen Vektor von eindeutigen Variablen in Spalte Project von df1 sein werden. Dann habe ich auf Basis davon gefiltert df2.

+0

tolle Arbeit! Vielen Dank – Naji

Verwandte Themen