【发布时间】:2022-01-01 15:55:48
【问题描述】:
我正在尽力不使用 data.table 计算行,因为这是不可取的。我想对具有许多列的大型 data.table 的值大于或等于 2 的所有行进行子集化,然后可能还会获取这些列。
可重现的例子:
DT <- as.data.table( rbind( diag(5)+1, diag(5), rep(0,5)) )
DT[1,1] = 1
我的代码:
DT[,lapply(.SD, function(x) x>=2 )]
我得到一个 data.table 的布尔值,现在很困惑我应该如何子集化它。
@IRTFM 提到的一种可行的方法是:
DT[DT[,apply(.SD, 1, function(x) any(x>=2))]]
V1 V2 V3 V4 V5
1: 1 2 1 1 1
2: 1 1 2 1 1
3: 1 1 1 2 1
4: 1 1 1 1 2
现在我应该如何对具有2 值的列进行子集化??
理想的结果是:
V2 V3 V4 V5
1: 2 1 1 1
2: 1 2 1 1
3: 1 1 2 1
4: 1 1 1 2
【问题讨论】:
-
我认为这样可以为每一列获得一个逻辑向量。你试过 apply(.SD, 1, function(x){any(x>=2)}) 在 i 位置吗?
-
这里是一个更紧凑的例子的代码:
DT <- as.data.frame( rbind( diag(5)+1, diag(5), rep(0,5)) )现在你的工作就是指定你想要从中返回什么。你目前的描述对我来说似乎不准确。 -
ok 更新了问题