我想data.table
通过选择第一个键并排除第二个键来对 a 进行子集化。
set.seed(18032)
DT <- data.table(grp1 = sample(10, 1000, T),
grp2 = sample(10, 1000, T),
v = rnorm(100), key = "grp1,grp2")
我的第一直觉没有奏效(!
操作太早):
DT[.(10, !10)] #!10 = 0, chooses the (10,0) subset
这似乎太不雅了,但有效:
DT[.(10, setdiff(unique(grp2), 10))] #unique(grp2) %\% 10 for the bold ;-)
这也有效,但这种方法牺牲了一些功能(例如,访问:=
on DT
):
setkey(DT, grp2, grp1)
DT[!.(10)][CJ(grp2, 10, unique = TRUE)]
#equivalently
DT[!.(10)][.(unique(grp2), 10)]
我是否已经用尽了我的选择,或者我错过了什么?