2

请考虑以下示例代码:

d1 <- c(1,2,2,3,4,3)
d2 <- c(10,11,12,13,14,15)

dt <- data.frame(d1,d2)

sample.index <- c(2,3)

dt[dt$d1 %in% sample.index, ]

这返回

  d1 d2
2  2 11
3  2 12
4  3 13
6  3 15

没关系。但是,如果我们有

sample.index <- c(2,2,3)

那么代码仍然返回相同的结果。相反,我希望匹配 2 的行返回两次,因为 2 出现两次sample.index- 我该如何实现?

4

2 回答 2

5

也许是这样:

sample.index <- c(2,2,3)
merge(dt,data.frame(d1 = sample.index))
  d1 d2
1  2 11
2  2 11
3  2 12
4  2 12
5  3 13
6  3 15
于 2013-07-19T19:28:22.593 回答
1

这是在乞求一些data.table语法糖(不用说它也会更快):

library(data.table)

d1 <- c(1,2,2,3,4,3)
d2 <- c(10,11,12,13,14,15)

# Note, I set the key to d1
dt <- data.table(d1, d2, key = 'd1')

dt[J(c(2,3))]
#   d1 d2
#1:  2 11
#2:  2 12
#3:  3 13
#4:  3 15

dt[J(c(2,2,3))]
#   d1 d2
#1:  2 11
#2:  2 12
#3:  2 11
#4:  2 12
#5:  3 13
#6:  3 15

另请注意,data.table加入并merge.data.frame导致最终排序有所不同。

于 2013-07-19T21:22:47.363 回答