You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将df1的Score匹配到df2的Score区间并返回对应Category?

解决方案

给你几个靠谱的实用方案,都是日常处理这类区间匹配问题常用的:

方法1:dplyr逐行匹配(小数据量首选,直观易懂)

通过rowwise()逐行处理df1的每个Score值,从df2中筛选出符合区间条件的Category:

library(dplyr)

final.df <- df1 %>%
  rowwise() %>%
  mutate(Category = df2$Category[Score >= df2$Score_min & Score <= df2$Score_max]) %>%
  ungroup()

# 验证是否符合预期结果
all.equal(final.df$Category, c(70, 50, 10, 90, 30, 60, 70, 80, 60, 20))

方法2:base R的cut函数(高效简洁,适配规则区间)

由于df2的区间是连续无重叠的,直接用cut()函数把Score映射到对应Category:

# 提取区间断点和对应标签
breaks <- c(df2$Score_min, max(df2$Score_max) + 1)
labels <- df2$Category

final.df <- df1 %>%
  mutate(Category = as.numeric(as.character(cut(Score, breaks = breaks, labels = labels, include.lowest = TRUE))))

# 验证结果
all.equal(final.df$Category, c(70, 50, 10, 90, 30, 60, 70, 80, 60, 20))

方法3:data.table非等连接(大数据量必备,性能拉满)

如果数据量很大,用data.table的非等连接效率会远超前两种方法:

library(data.table)

setDT(df1)
setDT(df2)

final.df <- df1[df2, on = .(Score >= Score_min, Score <= Score_max), Category := i.Category]

# 可选:转回data.frame格式
final.df <- as.data.frame(final.df)

# 验证结果
all.equal(final.df$Category, c(70, 50, 10, 90, 30, 60, 70, 80, 60, 20))

内容的提问来源于stack exchange,提问作者Sarah Medoff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 05:58:24