使用 DT::datatable 隐藏所有值为 0 的列

Hide columns where all values are 0 with DT::datatable

df1 <-
  structure(
    list(
      Z = structure(
        1:5, .Label = c("A", "B", "C", "D",
                        "E"), class = "factor"
      ), H1 = c(0L, 0L, 0L, 0L, 0L), X1 = c(178L,
                                            182L, 197L, 177L, 163L), H2 = c(0L, 0L, 0L, 0L, 0L), X2 = c(85L,
                                                                                                        77L, 66L, 68L, 86L), X3 = c(320L, 344L, 332L, 311L, 322L)
    ), class = c("tbl_df",
                 "tbl", "data.frame"), row.names = c(NA,-5L), .Names = c("Z",
                                                                         "H1", "X1", "H2", "X2", "X3")
  )

有没有办法告诉 DT::datable 隐藏只有零的列?在这种情况下 H1,并且 H2

我能做到:

library(DT)
df1 %>% 
  datatable(rownames = F,
            extensions = 'ColVis', options = list(
              dom = 'C<"clear">lfrtip',
              colVis = list(exclude = c(0), activate = 'mouseover')
            ))

然后手动隐藏这些列。

这是一个已为 1.9.8+ 版本修复的错误;请更新您的安装。

library(data.table) #1.9.8+
setDT(df1)
DT[ , lapply(.SD, function(x) if any(as.integer(x)) x)]
#    Z  X1 X2  X3
# 1: A 178 85 320
# 2: B 182 77 344
# 3: C 197 66 332
# 4: D 177 68 311
# 5: E 163 86 322

编辑:刚刚意识到这不是一个具体的 data.table 问题。但是这个确实有用,所以我就把它留在这里。

如果 df1data.frame 你可以这样做:

df1[, colSums(df1 != 0) > 0]