r语言 - 选择数据表中的行以显示 Shiny 中另一个表中的数据



所以我有这个数据帧...

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)

在 Shiny 中使用library(DT)library(ggplot2)我正在制作一个允许您选择每一行的df1renderDataTable,并且随着每一行被选中,它开始显示另一个数据表。我想做的是,当我单击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)

我认为这就是你要找的:

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它将是df1Project中唯一变量的向量。然后在此基础上我过滤了df2.

最新更新