从数据框中选择行

时间:2013-07-19 19:24:23

标签: r

请考虑以下示例代码:

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中出现两次 - 我怎么能实现这一点?

2 个答案:

答案 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会导致最终排序略有不同。