[英]Add a new row to existing dataframe based on shiny widgets' values
我有 shiny 應用程序,默認情況下通過表格顯示數據集。 然后在側邊欄中有 5 個小部件對應於表格的 5 列。 然后是一個動作按鈕。
添加:如果用戶按下Add
,那么他會在表格中添加一個帶有所選小部件值的新行。
library(shiny)
library(shinydashboard)
library(shinydashboardPlus)
library(DT)
Input<-structure(list(`Security Type` = c("Stock", "Stock", "Load Fund"
), Ticker = c("XOM", "NFLX", "AMCPX"), `Purchase Date` = structure(c(16070,
17084, 17084), class = "Date"), `Sale Date` = structure(c(18627,
NA, 18545), class = "Date"), `Amount Invested` = c("$10,000",
"$8,000", "$10,000")), class = c("spec_tbl_df", "tbl_df", "tbl",
"data.frame"), row.names = c(NA, -3L))
shinyApp(
ui = tags$body(class="skin-blue sidebar-mini control-sidebar-open",dashboardPage(
options = list(sidebarExpandOnHover = TRUE),
header = dashboardHeader(title = "Investment Advisor Monitoring - Insider Trading",titleWidth = 450),
sidebar = dashboardSidebar(minified = F, collapsed = F,
selectInput("sectype", "Security Type",
c(unique(Input$`Security Type`))),
selectInput("sectick", "Ticker",
c(unique(Input$Ticker))),
dateInput("PurDate", "Purchase Date", value = as.Date("2013-12-31")),
dateInput("selDate", "Sale Date", value = as.Date("2019-01-31")),
selectInput("aminv", "Amount Invested",
c(unique(Input$`Amount Invested`))),
actionButton("add","Add")
#actionButton("edit","Edit"),
#actionButton("del","Delete")
),
body = dashboardBody(
h3('Results'),
tabsetPanel(id = "tabs",
tabPanel("InsiderTraining",
dataTableOutput("TBL1")
)
)
),
controlbar = dashboardControlbar(width = 300
),
title = "DashboardPage"
)),
server = function(input, output) {
output$TBL1<-renderDataTable(
datatable(Input) )
}
)
您可以創建稱為data
的響應值,該值會在單擊按鈕時更新。 然后可以使用shiny::isolate
將輸入的當前值凍結到表中:
library(shiny)
library(shinydashboard)
library(shinydashboardPlus)
library(DT)
Input <- structure(list(`Security Type` = c("Stock", "Stock", "Load Fund"), Ticker = c("XOM", "NFLX", "AMCPX"), `Purchase Date` = structure(c(
16070,
17084, 17084
), class = "Date"), `Sale Date` = structure(c(
18627,
NA, 18545
), class = "Date"), `Amount Invested` = c(
"$10,000",
"$8,000", "$10,000"
)), class = c(
"spec_tbl_df", "tbl_df", "tbl",
"data.frame"
), row.names = c(NA, -3L))
shinyApp(
ui = tags$body(class = "skin-blue sidebar-mini control-sidebar-open", dashboardPage(
options = list(sidebarExpandOnHover = TRUE),
header = dashboardHeader(title = "Investment Advisor Monitoring - Insider Trading", titleWidth = 450),
sidebar = dashboardSidebar(
minified = F, collapsed = F,
selectInput(
"sectype", "Security Type",
c(unique(Input$`Security Type`))
),
selectInput(
"sectick", "Ticker",
c(unique(Input$Ticker))
),
dateInput("PurDate", "Purchase Date", value = as.Date("2013-12-31")),
dateInput("selDate", "Sale Date", value = as.Date("2019-01-31")),
selectInput(
"aminv", "Amount Invested",
c(unique(Input$`Amount Invested`))
),
actionButton("add", "Add")
),
body = dashboardBody(
h3("Results"),
tabsetPanel(
id = "tabs",
tabPanel(
"InsiderTraining",
dataTableOutput("TBL1")
)
)
),
controlbar = dashboardControlbar(width = 300),
title = "DashboardPage"
)),
server = function(input, output) {
# Init with some example data
data <- reactiveVal(Input)
observeEvent(
input$add,
{
# start with current data
data() %>%
add_row(
`Security Type` = isolate(input$sectype),
Ticker = isolate(input$sectick),
`Purchase Date` = isolate(input$PurDate),
`Sale Date` = isolate(input$selDate),
`Amount Invested` = isolate(input$aminv)
) %>%
# update data value
data()
}
)
output$TBL1 <- renderDataTable(
datatable(data())
)
}
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.