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

R语言两个DataFrame执行Inner Join时如何按指定数量提取匹配行

实现方法

你可以在关联两个表后按匹配字段分组,按Number指定的数量截取对应行数即可,参考代码如下:

library(tidyverse)

# 方案1:按df1原有顺序取对应数量的行
result <- inner_join(df1, df2, by = c("Measures", "Format")) %>%
  filter(Number > 0) %>% # 过滤掉提取数量为0的类别
  group_by(Measures, Format) %>% # 按匹配维度分组
  slice_head(n = first(Number)) %>% # 每个分组取前N行,N为该组指定的提取数量
  ungroup() %>%
  select(-Number) # 不需要Number字段可移除

# 方案2:如果需要随机抽取对应数量的题目(更适合组卷场景),把slice_head替换为slice_sample即可
result_random <- inner_join(df1, df2, by = c("Measures", "Format")) %>%
  filter(Number > 0) %>%
  group_by(Measures, Format) %>%
  slice_sample(n = first(Number)) %>%
  ungroup() %>%
  select(-Number)

逻辑说明

  1. 先用inner_join完成两个表的匹配,让df1中每一行匹配到对应类别的提取数量
  2. 过滤掉Number为0的分组,避免返回不需要的内容
  3. 按Measures和Format两个匹配字段分组
  4. 每组内按需求取指定数量的行:需要保留原有顺序用slice_head,需要随机抽样用slice_sample
  5. 最后可按需移除冗余的Number字段

内容的提问来源于stack exchange,提问作者ujjwal tyagi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:27:05