【发布时间】:2018-01-27 05:03:21
【问题描述】:
使用 dplyr、apply 和/或 ifelse 语句,我想确定 df_1 的每对 x 和 y 坐标是否介于 df_2 的一系列唯一 xmin 和 xmax 以及 ymin 和 ymax 坐标之一之间。对于每个成功的匹配或“命中”,我想用相应的 df_2$region 标签填充一个新列 df_1$region。
例如:
set.seed(806)
# df_1
df_1 <- data.frame(
region= 0,
x = sample(seq(-2, 2, .05), 5, replace = TRUE),
y = sample(seq(0.5, 4.5, .05), 5, replace = TRUE))
# df_2
df_2 <- data.frame(
region = sample(1:16, 16),
xmin = rep(seq(-2, 1, 1), each = 4),
xmax = rep(seq(-1, 2, 1), each = 4),
ymin = rep(seq(0.5, 3.5, 1), times = 4),
ymax = rep(seq(1.5, 4.5, 1), times = 4))
因此,df_1 应该是:
region x y
13 -1.00 0.60
11 0.95 1.55
13 -1.30 1.00
5 -1.40 3.05
4 1.25 4.50
下图应该有助于可视化 df_2 中 16 个比较区域中每个区域的位置。
非常感谢任何帮助。
【问题讨论】:
-
我得到了
library(tidyverse); df_1 %>% mutate(region = map2_int(x, y, ~df_2$region[.x > df_2$xmin & .x <= df_2$xmax & .y > df_2$ymin & .y <= df_2$ymax]))的答案,但地区不同。 -
@alistaire 您的代码似乎按预期工作。我认为这些区域在示例数据集中被错误标记。