【发布时间】:2020-04-05 22:25:01
【问题描述】:
我想通过任意数量的条件递归过滤数据帧d(表示为另一个数据帧z中的行)。
我从一个数据框d开始:
d <- data.frame(x = 1:10, y = letters[1:10])
第二个数据框z,具有x1 和x2 列,它们分别是过滤d$x 的下限和上限。此数据框z 可能会增长到任意行数。
z <- data.frame(x1 = c(1,3,8), x2 = c(1,4,10))
我想返回d 的所有行,其中d$x <= z$x1[i] 和d$x >= z$x2[i] 用于所有i,其中i = nrow(z)。
所以对于这个玩具示例,排除 1:1、3:4、8:10 中的所有内容。
x y
2 2 b
5 5 e
6 6 f
7 7 g
【问题讨论】:
-
为什么包含
x=2?它不符合您的约束条件。 -
它确实符合约束条件。
z中的每一行都是一对约束。所以排除 1:1、3:4、8:10 中的所有内容。 -
那么你的最后一帧是要排除的行吗?抱歉,我一定错过了。
-
嗯,你说得对。我可以在问题陈述中更清楚地说明这一点。
-
您所说的是非等值连接,目前(在 R 中)有效地做到这一点的唯一方法是使用
data.table。我认为 akrun 正在努力为您找到一个好的解决方案。