Я настоящий поклонник DT - оболочки данных для R. В настоящее время я столкнулся со следующей проблемой:
У нас есть данные с двумя ключами, например, континент и страна, а затем некоторые измерения, и я бы хотели бы сначала отображать только агрегированные данные для континента (агрегирование может быть похоже на здесь https://datatables.net/extensions/rowgroup/examples/initialisation/customRow.html), и если щелкнуть по континенту, скрытая строка для каждой страны станет видимой (аналогично этой https://rstudio.github.io/DT/002-rowdetails.html)
Для этих фиктивных данных
dat <- rbind(
data.frame(Continent = rep("Europe", 3),
Country = c("England", "France", "Italy"),
x = 1 : 3,
y = 7 : 5),
data.frame(Continent = rep("Africa", 3),
Country = c("Niger", "Benin", "Uganda"),
x = 5 : 7,
y = 2 : 4))
я хотел бы показать
Continent TotalX MeanY
1: Europe 6 6
2: Africa 18 3
по умолчанию, и если щелкнуть по Европе или Африке, должны появиться соответствующие записи.
В настоящее время я достигаю этого: текущий статус
У фиктивного приложения есть следующий код (взято из Collapse rowGroup Shiny )
library(shiny)
library(DT)
ui <- fluidPage(# Application title
titlePanel("Collapse/Expand table"),
mainPanel(DTOutput("my_table")))
callback_js <- JS(
"table.on('click', 'tr.group', function () {",
" var rowsCollapse = $(this).nextUntil('.group');",
" $(rowsCollapse).toggleClass('hidden');",
"});"
)
dat <- rbind(
data.frame(Continent = rep("Europe", 3),
Country = c("England", "France", "Italy"),
x = 1 : 3,
y = 7 : 5),
data.frame(Continent = rep("Africa", 3),
Country = c("Niger", "Benin", "Uganda"),
x = 5 : 7,
y = 2 : 4))
server <- function(input, output) {
output$my_table <- DT::renderDT({
datatable(
dat,
extensions = 'RowGroup',
options = list(rowGroup = list(dataSrc = 1), pageLength = 20),
callback = callback_js,
selection = 'none'
)
})
}
# Run the application
shinyApp(ui = ui, server = server)
Но пока агрегация не включает.
Я много искал, но мои знания о том, как включить javascript, очень ограничены.
Меня вдохновляет тот факт, что я получил лист Excel, где это возможно ... и благодарен за любое предложение.