代码之家  ›  专栏  ›  技术社区  ›  Karsten W.

非零值数据表列

  •  1
  • Karsten W.  · 技术社区  · 4 年前

    a 我的 data.table . 下面是一个例子

    set.seed(42)
    DT <- data.table(
        id = c("b","b","b","a","a","c"),
        a = sample(c(0,1), 6, replace=TRUE),
        b = 7:12,
        c = 13:18
    )
    col <- "a"
    

    如果 DT data.frame ,我能做到

    x <- DT[,col]       # I can do DT[,..col] to translate this line
    x[x>0]              # here is where I am stuck
    

    日期 是一个 ,此代码失败。错误消息是:“i是无效类型(矩阵)”。

    as.vector(x) 但没有成功。

    任何暗示都很感激。这似乎是个初级问题。然而,搜索SO和介绍vignette数据表没有找到解决办法。

    2 回复  |  直到 4 年前
        1
  •  2
  •   akrun    4 年前

    .SDcols 指定列的步骤

    DT[DT[, .SD[[1]] > 0, .SDcols = col]]
    

    或与 get

    DT[DT[ ,get(col) > 0]]
    
    DT[get(col) > 0][[col]]
    #[1] 1 1
    

    或者另一个选择是 [[

    DT[DT[[col]] > 0]
    #  id a  b  c
    #1:  a 1 11 17
    #2:  c 1 12 18
    

    DT[DT[[col]] >0][[col]]
    #[1] 1 1
    
        2
  •  1
  •   Meri Khurshudyan    4 年前

    您可以使用过滤器:

    DT %>% filter(column_name > 0)