如何用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
相关产品推荐
相关产品推荐

