首页 > 解决方案 > 如何在 DT 的左侧有 Excel 中的行号?

问题描述

我想在左侧有一个始终显示的1, 2, 3, ...行号(就像 excel 行号一样),以便用户在单击列以更改表的顺序后有一个参考行号来查看感兴趣的行的排名。

编辑:

library(DT)
n <- 20
set.seed(1)
df <- data.frame(customer_id = sample(10),
           amount_2016 = round(runif(n) * 16),
           amount_2017 = round(runif(n) * 17),
           amount_2018 = round(runif(n) * 18),
           amount_2019 = round(runif(n) * 19))

datatable(df)

默认

点击后amount_2016显示

按金额订购_2016

它显示17, 14, 1, 2, 15, ...并且我希望它保持1, 2, 3, ...就像在 Excel 中一样

标签: rshinydt

解决方案


诀窍是定义一个callback JS()实现动态行号计数器table.on行为的函数。

这是一个最小的可重现 RMarkdown 示例:

---
title: "Untitled"
output: html_document
---

```{r}
library(DT)
datatable(
    iris,
    callback = JS("
    table.on( 'order.dt search.dt', function () {
        table.column(0, {search:'applied', order:'applied'}).nodes().each( 
            function (cell, i) {
                cell.innerHTML = i+1;
            } );
    } )"))
```

生产

在此处输入图像描述

无论您如何对列进行排序,行号将始终保持为 1、2、3、...


推荐阅读