Я хочу выбрать данные после ввода нескольких ключевых слов. Я хочу повторить этот процесс выбора данных после ввода некоторых ключевых слов. Например, я хочу выбрать автомобили Mazda и Maserati. Я не хочу складывать ключевые слова Mazda и ключевые слова Maserati вместе, чтобы получить данные. Я хочу ввести ключевое слово Mazda и выбрать данные, а затем удалить Mazda и ввести ключевое слово Maserati в поле поиска над данными. Проблема с моим кодом заключается в том, что если я удалю Mazda и введу Maserati, выбранная строка будет удалена.
Вот мой код:
library(shiny)
library(tidyverse)
library(readxl)
library(DT)
library(shinydashboard)
mtcars_df <- rownames_to_column(mtcars)
names(mtcars_df)[1] <- "Name"
mtcars_df$Keywords <- ""
for (i in 1:nrow(mtcars_df)){
temp1 <- strsplit(as.character(tolower(str_squish(mtcars_df$Name[i])))," ")[[1]]
for (j in 1:length(temp1)){
mtcars_df$Keywords[i] <- paste0(mtcars_df[i, "Keywords"], trimws(gsub(",$","",temp1[j])), ", ")
}
}
keywordschoice <- sort(trimws(unique(tolower(gsub(",$","",unlist(strsplit(mtcars_df$Keywords, ",")))))))
## create the interactive
ui <- fluidRow(column(9, offset = 1,
selectizeInput(inputId = "keywords", label = "Select keyword(s)", choices = keywordschoice, selected = "Mazda", multiple = T),
br(),
DT::dataTableOutput("table"),
br(),
br(),
DT::dataTableOutput("table2"),
br(),
actionButton("gobutton","Configure"),
br(),
br(),
htmlOutput("updated.df"),
br()
))
server <- shinyServer (
function (input, output, session) {
dataoftable <- reactive({
database <- mtcars_df
keywords <- c(input$keywords)
if (is.null(keywords)){
all_df_display <- mtcars_df
} else {
all_df <- data.frame()
for (i in 1:length(keywords)){
df <- mtcars_df[grepl(keywords[i], mtcars_df$Keywords, perl = TRUE), ]
all_df <- rbind(all_df, df)
}
all_df <- distinct(all_df)
all_df$num <- str_count(all_df$Keywords, paste(keywords, collapse = "|"))
all_df_display <- all_df %>% arrange(desc(num))
}
all_df_display
})
output$table <- DT::renderDataTable(dataoftable() , server = TRUE, options = list(searching = FALSE))
dataoftable2 <- reactive({
s <- input$table_rows_selected
df_input <- dataoftable()
if(length(dataoftable())){
df_input <- df_input[s, ]
}
df_input
})
output$table2 <- DT::renderDataTable(dataoftable2(), server = FALSE, options = list(searching = FALSE), editable = list(target = 'cell', disable = list(columns = c(1,2)))) ###
}
)
shinyApp(ui = ui, server = server)
Есть ли другой способ, которым я могу воспользоваться? может это сделать? Пожалуйста, дайте мне знать, если что-то непонятно.
Спасибо.