1
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')
            ))

然后手动隐藏这些列。

4

2 回答 2

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具体的问题。但这确实有效,所以我会把它留在这里。

于 2016-02-12T14:33:41.823 回答
2

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

df1[, colSums(df1 != 0) > 0]
于 2016-02-12T14:36:08.007 回答