我发现了很多类似的问题(1,2,3是其中的一些问题),但没有一个回答了我的问题:
我有此数据:
set.seed(100)
df <- data.frame(X = sample(1:10, 100, replace=TRUE),
Y = sample(11:90, 100, replace=TRUE),
Z = sample(1000:2000, 100, replace=TRUE),
stringsAsFactors = FALSE)
x <- data.frame(X = c(7, 5, 3, 9),
Y = c(14, 13, 19, 87),
stringsAsFactors = FALSE)
其中x
是df
的子集,具有特定的分组和计算。现在,我试图通过两个df
列来过滤x
。例如,对于df
中的特定行,必须为X=7
和Y=14
为TRUE
,或X=5
和Y=13
为为TRUE
,如果FALSE
和X=7
必须为Y<>14
,依此类推。因此,标准必须同时考虑两个列。我已经尝试过了:
> df[df$X == x$X & df$Y == x$Y,]
X Y Z
28 9 87 1071
当我知道它必须至少为4时,这仅给我一个真实值(因为x
是df
的子集)
这是我想要的(它给我0行):
df[df[,c("X","Y")] %in% x[,c("X","Y")],]
预期输出:
X Y Z
16 7 14 1632
28 9 87 1071
30 3 19 1297
38 7 14 1701
67 5 13 1323
77 9 87 1484
88 3 19 1951
答案 0 :(得分:1)
也许我们需要一个inner_join
library(dplyr)
inner_join(df, x)
# X Y Z
#1 7 14 1632
#2 9 87 1071
#3 3 19 1297
#4 7 14 1701
#5 5 13 1323
#6 9 87 1484
#7 3 19 1951
如果我们还需要匹配行名
df[do.call(paste, df[names(x)]) %in% do.call(paste, x),]
# X Y Z
#16 7 14 1632
#28 9 87 1071
#30 3 19 1297
#38 7 14 1701
#67 5 13 1323
#77 9 87 1484
#88 3 19 1951