用重复值对子表进行设置

时间:2018-12-02 10:42:04

标签: r data.table

我想以一种可以重复提供一些行的方式对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向量中那样。是否可以以相当简单的方式做到这一点而无需循环?谢谢。

1 个答案:

答案 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)]