将过滤后的 DT::datatable 保存到新的数据框 R shiny
Save filtered DT::datatable into a new dataframe R shiny
假设我有一个闪亮的应用程序显示如下数据 table:
library(shiny)
library(tidyverse)
library(datasets)
library(DT)
data<- as.data.frame(USArrests)
#data<- cbind(state = rownames(data), data)
ui <- fluidPage(
dataTableOutput("preview")
)
# Define server logic required to draw a histogram
server <- function(input, output) {
output$preview<- renderDataTable(
datatable(data, options = list(searching = T, pageLength = 10, lengthMenu = c(5,10,15, 20), scrollY = "600px", scrollX = T ))
)
}
# Run the application
shinyApp(ui = ui, server = server)
假设我随后在搜索框中输入“爱荷华州”。我想将过滤后的数据 table 保存到应用程序内的单独数据框中。我也希望它是动态的,所以如果我输入“肯塔基州”,它会将肯塔基州的过滤数据保存到数据框中。有没有办法做到这一点?
注意:这是一个 DT 数据table
也许是这种解决方案。可以添加更多条件,例如检查大写首字母,但主要思想是检查每一列并搜索在 datatable
搜索框中输入的模式。这可能会或可能不会导致打印多个数据集(取决于字符串是否在多列中部分匹配(这也可以通过 rbind
函数解决。
代码:
library(shiny)
library(tidyverse)
library(datasets)
library(DT)
data <- as.data.frame(USArrests)
data <- cbind(state = rownames(data), data)
ui <- fluidPage(
dataTableOutput("preview"),
tableOutput('filtered_df')
)
# Define server logic required to draw a histogram
server <- function(input, output) {
df <- reactiveValues()
output$preview<- renderDataTable(
datatable(data, options = list(searching = T, pageLength = 10, lengthMenu = c(5,10,15, 20), scrollY = "600px", scrollX = T ))
)
observeEvent(input$preview_search, {
searched_string <- map(data, ~str_subset(.x, input$preview_search)) %>% discard(~length(.x) == 0)
df$filtered <- syms(names(data)) %>%
map(~ filter(data, !!.x %in% searched_string)) %>%
discard(~ nrow(.x) == 0)
})
output$filtered_df <- renderTable({df$filtered})
}
# Run the application
shinyApp(ui = ui, server = server)
假设我有一个闪亮的应用程序显示如下数据 table:
library(shiny)
library(tidyverse)
library(datasets)
library(DT)
data<- as.data.frame(USArrests)
#data<- cbind(state = rownames(data), data)
ui <- fluidPage(
dataTableOutput("preview")
)
# Define server logic required to draw a histogram
server <- function(input, output) {
output$preview<- renderDataTable(
datatable(data, options = list(searching = T, pageLength = 10, lengthMenu = c(5,10,15, 20), scrollY = "600px", scrollX = T ))
)
}
# Run the application
shinyApp(ui = ui, server = server)
假设我随后在搜索框中输入“爱荷华州”。我想将过滤后的数据 table 保存到应用程序内的单独数据框中。我也希望它是动态的,所以如果我输入“肯塔基州”,它会将肯塔基州的过滤数据保存到数据框中。有没有办法做到这一点? 注意:这是一个 DT 数据table
也许是这种解决方案。可以添加更多条件,例如检查大写首字母,但主要思想是检查每一列并搜索在 datatable
搜索框中输入的模式。这可能会或可能不会导致打印多个数据集(取决于字符串是否在多列中部分匹配(这也可以通过 rbind
函数解决。
代码:
library(shiny)
library(tidyverse)
library(datasets)
library(DT)
data <- as.data.frame(USArrests)
data <- cbind(state = rownames(data), data)
ui <- fluidPage(
dataTableOutput("preview"),
tableOutput('filtered_df')
)
# Define server logic required to draw a histogram
server <- function(input, output) {
df <- reactiveValues()
output$preview<- renderDataTable(
datatable(data, options = list(searching = T, pageLength = 10, lengthMenu = c(5,10,15, 20), scrollY = "600px", scrollX = T ))
)
observeEvent(input$preview_search, {
searched_string <- map(data, ~str_subset(.x, input$preview_search)) %>% discard(~length(.x) == 0)
df$filtered <- syms(names(data)) %>%
map(~ filter(data, !!.x %in% searched_string)) %>%
discard(~ nrow(.x) == 0)
})
output$filtered_df <- renderTable({df$filtered})
}
# Run the application
shinyApp(ui = ui, server = server)