R reactable - expand/ungroup 由 groupBy() 创建的单项组
R reactable - expand/ungroup single item groups created by groupBy()
我正在尝试在 Shiny 中使用 reactable 生成交互式 table,它只为在单个键变量下包含多个值的行创建可扩展组。
library(reactable)
library(data.table)
data <- setDT(MASS::Cars93[10:22, c("Manufacturer", "Model", "Type", "Price", "MPG.city")])
reactable(data, groupBy = "Manufacturer")
上面的 table 仅显示 Chrylser 下的一个条目 - 我希望它自动展开,或者理想情况下根本没有展开箭头并在一行中显示所有信息。
一些笨拙的代码生成了一个 table,它大致显示了我想要的内容:
data_unique <- unique(data, by = "Manufacturer")
data_dups <- unique(data[duplicated(data, by = "Manufacturer")]$Manufacturer)
reactable(data_unique,
columns = list(Manufacturer = colDef(details = function(index){
if(data_unique[index]$Manufacturer %in% data_dups){
reactable(data[Manufacturer == data_unique[index]$Manufacturer,
c("Model", "Type")])
}})))
Chrylser 现在不再有展开按钮并在一行中显示其所有信息。主要问题是展开按钮会生成一个单独的 table,它与主 table 不一致。我喜欢第一个示例使用 groupBy() 产生的行为,因此理想情况下我会结合两者。谢谢。
正如你说的要在shiny
中使用它,我可以想到使用JavaScript
来自动触发点击事件:
library(shinyjs)
ui <- fluidPage(useShinyjs(), reactable(data, groupBy = "Manufacturer"))
server <- function(input, output, session) {
session$onFlushed(function() {
runjs('$(".rt-td>div>span").filter(function(idx, el) {return $(el).text().includes("(1)")}).trigger("click")')
})
}
shinyApp(ui, server)
你可以简单地使用'aggregate'函数来实现这个-
示例:
reactable(data,
groupBy = c("Manufacturer"),
resizable = TRUE,
......
columns = list("Model" = colDef(aggregate = "unique"),
"Type" = colDef(aggregate = "unique")))
我正在尝试在 Shiny 中使用 reactable 生成交互式 table,它只为在单个键变量下包含多个值的行创建可扩展组。
library(reactable)
library(data.table)
data <- setDT(MASS::Cars93[10:22, c("Manufacturer", "Model", "Type", "Price", "MPG.city")])
reactable(data, groupBy = "Manufacturer")
一些笨拙的代码生成了一个 table,它大致显示了我想要的内容:
data_unique <- unique(data, by = "Manufacturer")
data_dups <- unique(data[duplicated(data, by = "Manufacturer")]$Manufacturer)
reactable(data_unique,
columns = list(Manufacturer = colDef(details = function(index){
if(data_unique[index]$Manufacturer %in% data_dups){
reactable(data[Manufacturer == data_unique[index]$Manufacturer,
c("Model", "Type")])
}})))
正如你说的要在shiny
中使用它,我可以想到使用JavaScript
来自动触发点击事件:
library(shinyjs)
ui <- fluidPage(useShinyjs(), reactable(data, groupBy = "Manufacturer"))
server <- function(input, output, session) {
session$onFlushed(function() {
runjs('$(".rt-td>div>span").filter(function(idx, el) {return $(el).text().includes("(1)")}).trigger("click")')
})
}
shinyApp(ui, server)
你可以简单地使用'aggregate'函数来实现这个-
示例:
reactable(data,
groupBy = c("Manufacturer"),
resizable = TRUE,
......
columns = list("Model" = colDef(aggregate = "unique"),
"Type" = colDef(aggregate = "unique")))