【问题标题】:select data that only columns whose names match a condition with a fixed column选择仅名称与固定列条件匹配的列的数据
【发布时间】:2019-05-15 16:26:28
【问题描述】:

我有一个闪亮的应用程序,用户在其中选择一些值并基于该值过滤数据框。过滤发生在列名上。但是我需要在每个选择中都有一个固定的列。

output$fault_template <- renderDataTable({
    fau <-  fau[,grepl(input$su, names(fau)) ]
    datatable(fau[,-1:-1],class = 'cell-border stripe')

  })

样本数据:

A   B    C    D
-----------------
1  3      4    5
3  4      5    6
4  5      2    2
3  4      1    9

在下拉列表中我只有B,C,D

如果我在下拉菜单中选择B,我需要得到

 A B   
-----
1  3     
3  4    
4  5     
3  4     

如果我在下拉菜单中选择C,我需要得到

A  C   
-----
1  4   
3  5    
4  2    
3  1   

A 列应该用任何结果固定

【问题讨论】:

  • 为什么在寻找完全匹配时使用部分匹配 (grepl)?正常的方式是fau[, names(fau) %in% c(input$su, "A")]

标签: r dataframe shiny rstudio


【解决方案1】:

试试这个:

output$fault_template <- renderDataTable({
    fau <-  fau[, c(1, grep(input$su, names(fau))) ]
    datatable(fau[,-1:-1],class = 'cell-border stripe')

  })

通过将grepl 更改为grep,您将获得列索引。假设 A 列的索引为 1,然后使用 c(1, ... 将其添加到选择中

如果 A 列的列索引可能会更改,请尝试:

c(grep("A", names(fau)), grep(input$su, names(fau)))

输入模式

如果input$su 是类似“ASD GHG BVG JJJ”的字符,则需要将其转换为有用的正则表达式

尝试改变:

grep(input$su, names(fau))

grep( gsub(" +", "|", input$su), names(fau))

这会产生一个模式:"ASD|GHG|BVG|JJJ"。我假设每三个字母组是一个列名

【讨论】:

  • 它正在工作......但我收到一个错误Warning: Error in grep: invalid 'pattern' argument
  • 模式由input$su的内容给出,贴一个例子。
  • 真实数据会像 ASD GHG BVG JJJ 等
猜你喜欢
  • 2013-09-06
  • 1970-01-01
  • 1970-01-01
  • 2014-07-14
  • 2022-08-19
  • 1970-01-01
  • 2020-01-04
  • 2016-08-23
  • 1970-01-01
相关资源
最近更新 更多