如何基于网络对频率数据集统计各分组对应关联分组的计数
实现方法
核心思路
你提供的数据集存储的是无向关联对,每个分组的关联计数需要统计所有和它出现在同一行的其他分组,并且同一对关联仅计数一次。我们可以通过将双向关联统一整理后去重计数得到结果。
测试数据集构造
先将你提供的数据集导入R环境:
df <- structure(list(V1 = structure(c(2L, 3L, 4L, 5L, 3L, 4L, 5L, 4L, 5L), .Label = c("ABC", "DEF", "GHI", "JKL", "MNO"), class = "factor"), V2 = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L), .Label = c("ABC", "DEF", "GHI", "JKL", "MNO"), class = "factor"), Freq = c(3L, 2L, 3L, 2L, 3L, 1L, 2L, 1L, 1L)), row.names = c(NA, 9L), class = "data.frame")
代码实现
Base R 版本(无需额外安装包)
# 拼接双向关联对 pairs <- rbind( data.frame(group = df$V1, related = df$V2), data.frame(group = df$V2, related = df$V1) ) # 去重避免同一对关联重复计数 unique_pairs <- unique(pairs) # 统计每个分组的关联数量 result <- as.data.frame(table(unique_pairs$group)) colnames(result) <- c("x", "y")
Tidyverse 版本
library(tidyverse) result <- df %>% # 提取关联列生成双向键值对 pivot_longer(V1:V2, values_to = "group") %>% mutate(pair_id = rep(row_number(), each = 2)) %>% group_by(pair_id) %>% mutate(related_group = rev(group)) %>% ungroup() %>% select(group, related_group) %>% distinct() %>% count(group, name = "y") %>% rename(x = group)
输出结果
运行以上任意代码都可以得到你需要的输出:
x y 1 ABC 4 2 DEF 4 3 GHI 4 4 JKL 3 5 MNO 3
内容的提问来源于stack exchange,提问作者user35131
相关产品推荐
相关产品推荐

