如何找出哪些值对应于另一个数据帧中的范围?[复制]

How to find out which values correspond to a range in another dataframe? [duplicate]

提问人:Redesfist 提问时间:9/6/2023 最后编辑:r2evansRedesfist 更新时间:9/6/2023 访问量:30

问:

我正在尝试找出我的一个数据帧中的哪些值介于另一个数据帧的值之间,并基于此将数据放入列中。

假设我有 2 个 DataFrame,第一个是:

名字 法典 活动
苹果 02050
三星 54004
克鲁格 06001

第二个DF:

活动
移动 01100 01700
计算机 02000 03000
汽车 03000 04000
电视 05000 10000

期望输出:

名字 法典 活动
苹果 02050 计算机
三星 54004
克鲁格 06001 电视
df1 <- data.frame(Name = c("Apple","Samsung", "Kruger"),
                  Code = c("02050","54004", "06001"),
                  Activity = "")

df2 <- data.frame(Activity = c("Mobile","computers", "cars", "tv"),
                  Left = c("01100","02000", "03000", "05000"),
                  Right = c("01700","03000", "04000", "10000"))

我一整天都被困在这个问题上。我主要尝试使用 sqldf、left_join 和 which,但不断出现错误。无法理解为什么which()不起作用,只需执行以下操作即可:

df1[which(as.numeric(df1$code) < as.numeric(df2$RIGHT) & 
              (as.numeric(df1$code) > as.numeric(df2$LEFT) | 
               as.numeric(df1$code) == as.numeric(df2$LEFT) 
              ) 
         ),]...........etc 
R 数据帧 匹配

评论

0赞 r2evans 9/6/2023
使用该软件包,我们可以做.、 和 也支持此功能,请参阅重复链接以获取使用它们的更多示例。dplyrleft_join(df1, df2, by = join_by(between(Code, Left, Right)), suffix = c("", ".y")) %>% mutate(Activity = if_else((is.na(Activity) | !nzchar(Activity)) & !is.na(Activity.y), Activity.y, Activity)) %>% select(-Activity.y, -Left, -Right)data.tablesqldffuzzyjoin
0赞 Redesfist 9/7/2023
看来我不能用join_by。
0赞 Redesfist 9/7/2023
我通过在 between 函数上使用循环解决了这个问题
0赞 r2evans 9/7/2023
如果您没有 ,则表示您使用的是旧版本的 。一个循环可以完成你需要的大部分工作,我建议它充其量是低效的。祝你好运。join_bydplyrfor

答: 暂无答案