我有ID / label第一列的数据表,如下所示;
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处理此问题的方法吗?
答案 0 :(得分:0)
我们可以在.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))]