我想以一种可以重复提供一些行的方式对data.table进行子集化。这对索引很好用,但是我不确定如何用简单的方法对值进行处理,尤其是当值不只出现在一行中时。
例如:
library(data.table)
dt<-data.table(x1=c('a','a','b','b','c','c'),x2=c(1,2,3,4,5,6))
xsel<-c('a','b','a','a','c','b')
dt[x1%in%xsel,]
将提供以下输出:
x1 x2
1: a 1
2: a 2
3: b 3
4: b 4
5: c 5
6: c 6
我想按原先的顺序重复获取它,就像在xsel
向量中那样。是否可以以相当简单的方式做到这一点而无需循环?谢谢。
答案 0 :(得分:2)
使用:
setkey(dt, x1) # set the key
dt[J(xsel)] # or: dt[.(xsel)]
给予:
x1 x2 1: a 1 2: a 2 3: b 3 4: b 4 5: a 1 6: a 2 7: a 1 8: a 2 9: c 5 10: c 6 11: b 3 12: b 4
无需设置密钥,您可以使用:
dt[.(xsel), on = .(x1)]