R中data.frame的非唯一结果匹配标准

时间:2013-08-30 01:10:39

标签: r dataframe criteria

我使用R从数据框中提取一组行。许多行被重复拉动。使用两个标准选择行。不幸的是,结果产生了一组符合标准的独特行。我将证明......

鉴于data.frame:

a = data.frame(array(c(1,2,3,1,4,5,6,2,7,8,9,4), c(4,3)))

看起来像:

  X1 X2 X3
1  1  4  7
2  2  5  8
3  3  6  9
4  1  2  4

假设我希望使用由数组定义的两组条件来调用a

criteriaX1 = c(1,2,1,1,2)
criteriaX2 = c(4,5,4,2,5)

然后我会使用这个命令:

a[ a$X1 %in% criteriaX1 & a$X2 %in% criteriaX2, ]

希望得到5行像这样(看看@ criteriaX1作为密钥,并读取X1。如果它还没有,那么应该有意义):

  X1 X2 X3
1  1  4  7
2  2  5  8
3  1  4  7
4  1  2  4
5  2  5  8

但我只是得到了这个:

  X1 X2 X3
1  1  5  9

我猜这与%in%定义Set Membership有关,但我不知道如何在没有令人讨厌的循环的情况下解决这个问题。所有的帮助表示赞赏。

感谢。

1 个答案:

答案 0 :(得分:4)

您可以使用data.table equi-join:

library(data.table)
a <- data.table(a)
b <- data.table(X1 = criteriaX1, X2 = criteriaX2)

setkey(a, X1, X2)
a[b]
#    X1 X2 X3
# 1:  1  4  7
# 2:  2  5  8
# 3:  1  4  7
# 4:  1  4  7
# 5:  2  5  8