【问题标题】:Non-zero Values of Data.Table ColumnData.Table 列的非零值
【发布时间】:2021-05-21 20:24:38
【问题描述】:

我想提取我的data.table 的特定列a 的非零值。这是一个例子

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"

如果DTdata.frame,我可以这样做

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

由于DTdata.table,因此此代码失败。错误信息是:“i is invalid type (matrix)”。

我尝试了as.vector(x),但没有成功。

任何提示表示赞赏。这似乎是一个初学者的问题。但是,搜索 SO 和 data.table 的介绍小插曲并没有找到解决方案。

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    我们可以使用.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】:

      你可以使用过滤器:

      DT %>% filter(column_name > 0)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-27
        • 1970-01-01
        • 2011-06-12
        • 2015-08-24
        • 1970-01-01
        • 2013-10-17
        • 1970-01-01
        相关资源
        最近更新 更多