r - 如何在 Shiny 中使用 rhandsontable 删除列

标签 r filter shiny multiple-columns rhandsontable

我正在构建一个 R Shiny 应用程序来编辑上传的数据并使用 rhandsontable 包修改它们。 我想允许用户删除列。尽管我可以引入添加具有不同类型的类(整数、数字、字符)的列的可能性,但我无法允许用户从上传的数据集中删除列。 (默认情况下可以删除/添加行)。 我尝试使用命令 useTypes =TRUE (或 useTypes == TRUE)。 作为示例,我构建了这个 reprex。


library(shiny)
library(rhandsontable)
library(DT)

ui <- fluidPage(
  tabPanel("Databases", icon = icon("users"),
           sidebarLayout(
             sidebarPanel(
               conditionalPanel('input.dataset === "Import Data"',
                                textInput('NewCol', 'Enter new column name'),
                                radioButtons("type", "Column type:",
                                             c("Integer" = "integer",
                                               "Numeric" = "numeric",
                                               "Text" = "character")),
                                actionButton("goButton", "Update Table")
               )), 
             mainPanel(
               tabsetPanel(id='dataset',
                           tabPanel(title = "Import Data",
                                    rHandsontableOutput('mytable')
                           )))))) 

server <- function(input, output,session) {
  
  indat <- reactiveValues()
  
  indat$data <- data.frame(
                a = c(3.58, 3.6, 3.65, 3.72),
                b = c(0.0015, 0.0065, 7e-04, 0.0012),
                c = c(0.0014, 0.0058, 9e-04, 3e-04),
                d = c(0.0015, 0.0061, 6e-04, 7e-04))
  
  observe({
    if(!is.null(input$mytable)){
      indat$data <- hot_to_r(input$mytable)
    } else {
      return(NULL)} 
  })  
  
  output$mytable = renderRHandsontable(df())
  
  df <- eventReactive(input$goButton, {
    if(input$NewCol!="" && !is.null(input$NewCol) && input$goButton>0){
      if (input$type == "integer") v1 <- integer(NROW(indat$data))
      if (input$type == "numeric") v1 <- numeric(NROW(indat$data))
      if (input$type == "character") v1 <- character(NROW(indat$data))
      newcol <- data.frame(v1)
      names(newcol) <- input$NewCol
      indat$data <<- cbind(newcol,indat$data)
    }
    
    rhandsontable(indat$data, useTypes = TRUE, rowHeaderWidth = 200, stretchH = "all")%>%
      hot_context_menu(allowRowEdit = TRUE, 
                       allowColEdit = TRUE,
                       customOpts = list(
                         csv = list(name = "Download to CSV",
                                    callback = htmlwidgets::JS(
                                      "function (key, options) {
                         var csv = csvString(this, sep=',', dec='.');
                         var link = document.createElement('a');
                         link.setAttribute('href', 'data:text/plain;charset=utf-8,' +
                         encodeURIComponent(csv));
                         link.setAttribute('download', 'data.csv');
                         document.body.appendChild(link);
                         link.click();
                         document.body.removeChild(link);
                       }")),
                         search = list(name = "Search",
                                       callback = htmlwidgets::JS(
                                         "function (key, options) {
                         var srch = prompt('Search criteria');
                         this.search.query(srch);
                         this.render();
                       }")))) %>%
      hot_cols(columnSorting = TRUE) %>%
      hot_table(highlightCol = TRUE, highlightRow = TRUE)
  }, ignoreNULL = TRUE)
  
  mydataset <- eventReactive(input$goButton, {
    return(indat$data)
  })
}
 
shinyApp(ui, server)

如果有人能关注此事,我将不胜感激!

最佳答案

现在您有useTypes = TRUE。我通过将其更改为 useTypes = FALSE 来使其工作。

然后您可以通过右键单击需要删除的列来删除列,如下所示。

enter image description here

关于r - 如何在 Shiny 中使用 rhandsontable 删除列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63032250/

相关文章:

r - 在 Shiny 中使用 data.table 卡住标题和第一列

r - Shiny 的服务器崩溃

r - 如何使输入轨道日志保持 Shiny ,然后打印并保存?

r - 在映射内使用starts_with而不是显式命名

r - 根据 R 中第一个数据集的值,向量化来自不同数据集的变量的新变量添加

r - 每组,选择第一行和符合条件的另一行

django - 如何通过带注释的字段对组合查询集进行排序?

excel - VBA自动过滤器不等于

sql-server - 使用 RODBC 时返回字符(0)

r - 如何提取具有特定颜色的所有单元格值(及其单元格 ID)?