2017-08-16 112 views
1

所以我有这样的数据帧...DataTable中选择行

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) 

在晴朗的使用library(DT)library(ggplot2)闪亮的表现从另一个表中的数据我在制作一个renderDataTabledf1,它允许你选择每一行,并且当每一行被选中时,它开始显示另一个数据表。我想要做的是,当我点击df1中的一行时,所呈现的新数据表将给我一个df2的子集,仅显示所选项目的信息,总结计数并仍然按Sub_Project组织它们,像这样(如果你点击的df1项目A:

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

的什么,我试图做作品的实际功能,我只是不知道如何编程逻辑我想要什么?这里是我的整个应用程序

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

在'df3'中,'counts' 20似乎来自'df2'上的'Project'为'B'的那一行 – akrun

+0

@akrun它没有做什么是总结项目中相同Sub_Project的计数答:所以它忽略了日期信息,并保留由项目组织的'df1',然后通过类似的Sub_Projects汇总计数... – Naji

回答

1

我认为这就是你在找什么:

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) 

我已创建新的对象project,这将是在Project柱唯一变量的向量从df1。然后在它的基础上,我过滤了df2

+0

真棒!谢谢 – Naji