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

时间:2016-02-12 14:23:15

标签: r dataframe dt

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隐藏只有零的列?在这种情况下,H1H2

我可以这样做:

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

然后手动隐藏这些列。

2 个答案:

答案 0 :(得分:4)

这是针对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问题。但是这个确实有效,所以我会把它留在这里。

答案 1 :(得分:2)

如果df1data.frame,您可以这样做:

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