请考虑以下示例代码:
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
中出现两次 - 我怎么能实现这一点?
答案 0 :(得分: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
答案 1 :(得分: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
会导致最终排序略有不同。