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

R语言如何在dataframe中查找作答同一套测试的最大考生群体

解决方案

核心逻辑是直接为每一套测试生成唯一标识,完全不需要遍历所有题目组合,仅需遍历1000条考生数据即可完成计算,时间复杂度极低。

实现思路

同组考生的核心特征是作答的15道题的集合完全一致,也就是每行中非NA值的列的位置完全相同。我们只需要将每行非NA列的列名(或索引)按固定顺序拼接为唯一字符串,作为该套测试的ID,再按ID分组统计人数即可快速找到最大群体。

如果业务规则要求同组考生不仅题目相同、答案也完全一致,只需要在生成ID时把对应题目的得分也拼接进去即可。

代码实现

基于tidyverse的实现

library(dplyr)

# 生成测试ID并统计各组人数
stat_result <- df %>%
  rowwise() %>%
  mutate(
    # 仅按题目集合分组的ID生成逻辑
    test_id = paste(sort(names(select(., where(~!is.na(.))))), collapse = "_")
    # 如果需要同时匹配答案,用下面这行替换上面的test_id生成逻辑
    # test_id = paste(sort(paste(names(select(., where(~!is.na(.)))), select(., where(~!is.na(.))), sep = "=")), collapse = "_")
  ) %>%
  ungroup() %>%
  count(test_id, name = "group_size", sort = TRUE)

# 提取最大的同组群体
max_group <- slice_max(stat_result, group_size, n = 1)

基于base R的实现(无需安装第三方包)

# 生成每行的测试ID
test_ids <- apply(df, 1, function(row) {
  paste(sort(names(row)[!is.na(row)]), collapse = "_")
})
# 统计各组人数
stat_result <- sort(table(test_ids), decreasing = TRUE)
# 提取最大的同组群体
max_group <- head(stat_result, 1)

性能说明

1000行规模的数据集,上述两种实现都可以在毫秒级完成计算,完全规避了遍历C(100,15)组合的天文级计算量。

内容的提问来源于stack exchange,提问作者Tom McDonald

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:54:04