使用 DT 包中的数据表函数对 NA 进行排序

Sorting with NA using datatable function in DT package

我正在尝试使用 DT 包中的 datatable 函数创建一个 html table,这样当我在 R markdown 中对数据进行排序时,缺失的行将在之后排序最高的数字。

例如,在下面的table中,当我在降价文件中按“年龄”排序时,我希望最后列出带有 NA 的行,以便顺序为 14,15,21 ,NA.

dat <- data.frame("Age" = c(21,15,NA,14), 
"Name" = c("John","Dora", "Max", "Sam"), 
"Gender" = c("M","F","M",NA))


DT::datatable(dat, filter = c("top"))

我试过使用“na.last = TRUE”,这在数据table 最初打印时有效,但是当单击要排序的列时,NA 仍然在 14 之前。

如有任何帮助,我们将不胜感激!

使用render columnwise 选项,您可以在排序时设置缺失值的值:

library(DT)

dat <- data.frame("Age" = c(21,15,NA,14), 
                  "Name" = c("John","Dora", "Max", "Sam"), 
                  "Gender" = c("M","F","M",NA))

render <- JS(
  "function(data, type, row) {",
  "  if(type === 'sort' && data === null) {",
  "    return 999999;",
  "  }",
  "  return data;",
  "}"
)

datatable(
  dat, 
  filter = "top",
  options = list(
    columnDefs = list(
      list(targets = 1, render = render)
    )
  )
)