Есть ли способ скрыть групповые записи и показать совокупную строку по умолчанию в R / DT - PullRequest
0 голосов
/ 29 мая 2020

Я настоящий поклонник 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, где это возможно ... и благодарен за любое предложение.

1 Ответ

0 голосов
/ 08 июля 2020

Благодаря Стефану Лорану и его ответу на этот пост Родительские / дочерние строки в R я наконец смог ответить на вопрос. См. Приведенный ниже код для самостоятельного решения проблемы с игрушкой.

Для реальной проблемы, где нам также нужны сложные заголовки - для этого было очень полезно следующее сообщение Как создать datatable со сложным заголовком в R Блестящий? .

...