R语言dt::datatable顶部过滤器异常:选择'AA'时'A+'行也被筛选出来
问题
创建了如下示例数据框:
df2 = data.frame(RTG=c("A+","A+","AA","AA"),CITY=c("A","B","C","D"), stringsAsFactors = T)
随后创建datatable:
datatable(df2, rownames= T, colnames = T, filter = c('top'), extensions = "Buttons", options = list(scrollX = T , lengthChange = T , paging = T , autoWidth = F , pageLength = T , dom = 'Blfrtip' , info = T , searching = F ))
使用RTG过滤器选择'AA'时,RTG为'A+'的行也会被显示,不符合预期,请问问题出在哪?
解决方案
这是因为datatable默认的顶部筛选(filter='top')采用的是包含式匹配,而非精确匹配。'A+'字符串里包含'A',所以会被误匹配出来。同时注意原代码中pageLength = T是错误用法,该参数需设置为数字指定默认每页行数,以下是两种解决办法:
方法1:指定列的精确匹配规则
在options的columnDefs中配置目标列的筛选逻辑,关闭正则匹配以实现精确筛选:
datatable(df2, rownames= T, colnames = T, filter = c('top'), extensions = "Buttons", options = list(scrollX = T , lengthChange = T , paging = T , autoWidth = F , pageLength = 10 , dom = 'Blfrtip' , info = T , searching = F , columnDefs = list( list(targets = 1, # RTG列的索引(从0开始计数) type = "string", search = list(regex = FALSE)) ) ))
方法2:利用因子类型生成精确下拉筛选框
由于你已将RTG设为因子类型,可使用filterSelect生成仅包含因子水平的精确下拉选项:
datatable(df2, rownames= T, colnames = T, extensions = "Buttons", options = list(scrollX = T , lengthChange = T , paging = T , autoWidth = F , pageLength = 10 , dom = 'Blfrtip' , info = T , searching = F )) %>% filterSelect(1, "RTG", choices = levels(df2$RTG))
内容的提问来源于stack exchange,提问作者Angelo
相关产品推荐
相关产品推荐

