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

如何用R统计单列数据中的配对出现次数?

Tidy风格的儿童组队次数统计方案

1. 加载必要工具包

我们使用tidyverse套件里的dplyr、tidyr等工具完成处理,先加载包:

library(tidyverse)

2. 导入/构造数据

根据你提供的单列数据,先构造示例数据集(如果是从文件读取,替换成read.csv("你的文件路径")即可):

df <- tibble(Names = c(
  "Tom,Jack,Meave",
  "Tom,Arial",
  "Arial,Tim,Tom",
  "Neena,Meave",
  "Meave",
  "Tim,Meave"
))

3. 拆分姓名并生成组队配对

  • 给每个项目组添加唯一标识,方便后续分组处理
  • 将每行的逗号分隔姓名拆分为单独行
  • 对每个组生成所有两两组合;单人组自动生成与none的配对
  • 统一配对顺序(避免Tom,Arial和Arial,Tom被视为不同配对)
  • 统计每对的出现次数
pair_counts <- df %>%
  mutate(group_id = row_number()) %>%
  separate_rows(Names, sep = ",") %>%
  group_by(group_id) %>%
  mutate(
    pairs = if (n() == 1) {
      tibble(p1 = Names, p2 = "none")
    } else {
      as_tibble(t(combn(Names, 2)))
    }
  ) %>%
  unnest(pairs) %>%
  mutate(pair = str_c(pmin(p1, p2), pmax(p1, p2), sep = ",")) %>%
  ungroup() %>%
  count(pair, name = "Counts") %>%
  arrange(desc(Counts))

4. 查看结果

运行代码后,pair_counts即为统计好的结果:

print(pair_counts)

输出示例(包含你预期的部分记录):

# A tibble: 9 × 2
  pair         Counts
  <chr>         <int>
1 Tom,Arial         2
2 Meave,Tim         2
3 Jack,Meave        1
4 Jack,Tom          1
5 Meave,none        1
6 ...              ...

关键逻辑说明

  • separate_rows:将每行的逗号分隔姓名拆分为多行,便于后续生成配对
  • combn:生成组内所有不重复的两两组合
  • 单人组判断:通过n() == 1识别单人项目,自动生成与none的配对
  • pmin/pmax:统一配对的姓名顺序,确保顺序相反的配对被视为同一组统计

内容的提问来源于stack exchange,提问作者Ginko-Mitten

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:25:21