Дочерние таблицы с таблицами данных (развернуть / свернуть) - PullRequest
0 голосов
/ 25 февраля 2019

Мне нравится создавать таблицу данных с дочерней таблицей, например, с такими данными:

test = data.table(c(375, 789, 72, 663, 100), c(1237, 1237, 1237, 663, 100), c("abc", "abc", "abc", "d", "e"), c("a","b","c","d","e"))

Сначала я хотел бы иметь таблицу:

datatable(test[, .(V2,V3)][3:5])

при нажатии на abc, я хочучтобы иметь возможность расширить эту таблицу данных так, чтобы было показано следующее:

datatable(test[, .(V1, V4)][1:3])

Выходными данными будет html-файл, написанный в rmarkdown.Спасибо за любую помощь и заранее спасибо.

1 Ответ

0 голосов
/ 25 февраля 2019

Здесь можно начать с чего-то.Код, основанный на ответе Стефана здесь

library(DT)
datatable(
  cbind(' ' = '<img src=\"https://raw.githubusercontent.com/DataTables/DataTables/master/examples/resources/details_open.png\"/>', 
        mtcars), escape = -2,
  options = list(
    columnDefs = list(
      list(visible = FALSE, targets = c(0, 2, 3)),
      list(orderable = FALSE, className = 'details-control', targets = 1)
    )
  ),
  callback = JS("
                table.column(1).nodes().to$().css({cursor: 'pointer'});
                var format = function(d) {
                return '<table cellpadding=\"5\" cellspacing=\"0\" border=\"0\" style=\"padding-left:50px;\"> ' +
'<thead>'+
'<tr>'+
            '<th>1st column</th>'+
            '<th>2nd column</th>'+
        '</tr>'+
'</thead>'+
'<tbody>'+
'<tr>'+
            '<td>'+d[2]+'</td>'+
            '<td>'+d[3]+'</td>'+
        '</tr>' +
'</tbody>'
'</table>';
                };
                table.on('click', 'td.details-control', function() {
                var td = $(this), row = table.row(td.closest('tr'));
                if (row.child.isShown()) {
                row.child.hide();
                td.html('<img src=\"https://raw.githubusercontent.com/DataTables/DataTables/master/examples/resources/details_open.png\"/>');
                } else {
                row.child(format(row.data())).show();
                td.html('<img src=\"https://raw.githubusercontent.com/DataTables/DataTables/master/examples/resources/details_close.png\"/>');
                }
                });"
))

См. datatable веб-сайт здесь для получения более подробной информации.

...