最小示例:
dt <- data.table(a=c(1,2,3),b=c(4,5,6))
看起来是这样的:
> dt
a b
1: 1 4
2: 2 5
3: 3 6
如果我想获取值大于或等于5
的行的索引,我可以使用:
> dt[,rowSums(dt>=5) > 0]
[1] FALSE TRUE TRUE
或者行本身,但是在本例中行索引已经消失了:
> dt[rowSums(dt>=5) > 0]
a b
1: 2 5
2: 3 6
因此,我继续创建了一个新的列来跟踪行:
dt <- data.table(a=c(1,2,3),b=c(4,5,6),row=c('row1','row2','row3'))
新的dt是:
> dt
a b row
1: 1 4 row1
2: 2 5 row2
3: 3 6 row3
现在,如果我想使用相同的方法,子集将不再起作用:
> dt[,rowSums(dt>=5) > 0]
[1] TRUE TRUE TRUE
我的意图是使用rowSums
或ColSums
,并且仍然能够跟踪行。在此示例中为:
> dt
1: 2 5 row2
2: 3 6 row3
发布于 2021-11-23 03:45:12
使用您自己的子集设置方法,并假设跟踪行的列始终位于数据帧的末尾。然后,您可以选择仅将"rowsum“应用于选定的列,如下所示
dt <- data.table(a=c(1,2,3),b=c(4,5,6),row=c('row1','row2','row3'))
dt[rowSums(dt[, 1:(ncol(dt)-1)]>=5) > 0]
https://stackoverflow.com/questions/70080077
复制相似问题