所以我有这个数据帧...
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)
我正在制作一个允许您选择每一行的df1
renderDataTable
,并且随着每一行被选中,它开始显示另一个数据表。我想做的是,当我单击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
它将是df1
列Project
中唯一变量的向量。然后在此基础上我过滤了df2
.