【问题标题】:Row subsetting while preserving a label column in Data.Table在 Data.Table 中保留标签列的同时进行行子集化
【发布时间】:2018-11-01 15:18:49
【问题描述】:

我有 ID/标签第一列的数据表,如下所示;

         Name        P1  P2        P2
1:     DDX11L1 0.1300954  0 0.3019587
2:      WASH7P 2.0164780  0 0.6542439
3:   MIR6859-1 0.0000000  0 0.0000000

我经常这样进行子集设置;

rowSums(dt[,!"Gene"]>1)>2

还有这个;

dt[,grepl(glob2rx("*CPM"), names(cladGE)), with=F]

这些操作不可避免地会删除第一个 ID 列。我可以使用带有行名设置的 data.frame 来做到这一点,但是有没有 data.table 方法来处理这个?

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    我们可以指定.SDcols 中的列并使用rowSums 并创建一个新列

    dt[, newCol := rowSums(.SD > 1) > 2, .SDcols = 2:4]
    

    Reduce

    dt[, newCol := Reduce(`+`, lapply(.SD, `>`, 1)) > 2, .SDcols = 2:4]
    

    如果使用某些模式属性选择列,则grepl 可以在.SDcols 中使用

    dt[, newCol := Reduce(`+`, lapply(.SD, `>`, 1)) > 2, 
              .SDcols = grepl(glob2rx("*CPM"), names(cladGE))]
    

    【讨论】:

    • @akrun谢谢。我实际上想从子集创建一个新的 data.table,所以我做到了
    • @akh22 您可以创建原始数据dt1 <- copy(dt) 的副本如果它是新数据而不更改原始数据,请删除:=
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-13
    • 2019-09-28
    • 2021-05-13
    • 2015-06-26
    • 2019-09-07
    相关资源
    最近更新 更多