R不等长数据框基于Value变量区间匹配新增Amount列问题
R语言区间匹配赋值解决方案
你需要实现的是按区间匹配赋值,普通等值左连接无法满足该需求,以下提供两种稳定实现方案:
方法1:基础R实现(无需加载额外包)
核心调用findInterval函数完成区间定位,逻辑简单运行速度快:
# 对df2的Value列做升序排序,适配区间查找逻辑 df2_sorted <- df2[order(df2$Value), ] # 定位df1的Value在df2区间中的位置,相等值匹配对应Amount idx <- findInterval(df1$Value, df2_sorted$Value, rightmost.closed = TRUE) # 赋值,低于df2最小Value的情况返回0 df1$Amount <- ifelse(idx == 0, 0, df2_sorted$Amount[idx])
方法2:tidyverse生态实现
如果你习惯dplyr语法,可以结合区间构造完成匹配:
library(dplyr) df2 <- df2 %>% arrange(Value) # 提取区间边界与对应奖励值 breaks <- df2$Value amounts <- df2$Amount df1 <- df1 %>% rowwise() %>% mutate( idx = findInterval(Value, breaks), Amount = ifelse(idx == 0, 0, amounts[idx]) ) %>% ungroup() %>% select(-idx)
两种方法运行后得到的结果均与你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者On_an_island
相关产品推荐
相关产品推荐

