【发布时间】:2019-01-17 00:37:09
【问题描述】:
我有以下两个数据框:
df1 <- data.frame(group = rep("A", 5),
name = c("Brandon",
"Kyler",
"Trent",
"Lesa",
"Michael"),
gender = c("M", "F", "M", "F", "M"),
days = c(50, 45, 32, 60, 48))
df2 <- data.frame(group = rep("B", 10),
name = c("Erica",
"Jared",
"Sara",
"Helen",
"Tom",
"Ron",
"Cy",
"Lynn",
"Ken",
"Judy"),
gender = c("F", "M", "F", "F", "M", "M", "M", "F", "M", "F"),
days = c(47, 49, 62, 80, 74, 30, 55, 58, 63, 25))
我想根据gender 和days 过滤df2 以仅包含与df1 数据框中每一行最接近的匹配项,gender 优先。
例如,在df1 中,“Brandon”有gender == M 和days == 50。当我们只查看df2 中的gender == M 时,我们看到“Jared”在几天内最接近“Brandon”,因此“Jared”将被选为“Brandon”匹配。总的来说,生成的数据框如下所示:
# group name gender days
# B Jared M 49
# B Erica F 47
# B Ron M 30
# B Lynn F 58
# B Cy M 55
附加规则:
这是一个分层合并,其中
gender匹配优先于days紧密度。请注意,
df1中有两个等距选项可匹配“Lesa”(“Sara”和“Lynn”)。随机选择两者之一匹配“Lesa”。在上面的最终数据框中,示例选择了“Lynn”。df2中的“Jared”与df1中的“Brandon”和“Michael”距离相等。因为“Jared”已经匹配到“Brandon”,所以他不能也匹配到“Michael”。因此,与“Michael”的比赛继续进行到“Cy”,这是在gender和days方面的下一个最佳剩余比赛。
【问题讨论】:
-
您如何平衡
gender和days的重要性?编辑:抱歉没有看到你过滤性别。所以它是一个分层合并,您首先过滤性别然后获得最接近的日期匹配? -
@JonnyPhelps 你是对的 - 分层合并,给予
gender优先级。