我使用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有关,但我不知道如何在没有令人讨厌的循环的情况下解决这个问题。所有的帮助表示赞赏。
感谢。
答案 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