R中按分组统计数据框5个变量行内最常见数值对的实现方法
实现代码
你可以结合dplyr的分组处理函数和combn来实现需求,完整可运行代码如下:
首先加载依赖包:
library(tidyverse)
核心处理逻辑:
# 替换df为你自己的数据框名 stat_result <- df %>% group_by(group) %>% group_modify(.f = function(group_data, group_key) { # 逐行生成所有无序数值对 all_pairs <- apply(group_data %>% select(X1:X5), 1, function(row_val) { combn(row_val, m = 2, function(pair) paste(sort(pair), collapse = "-")) }) %>% as.vector() # 统计频次并排序 tibble( Pair = names(table(all_pairs)), n = as.integer(table(all_pairs)) ) %>% arrange(desc(n)) }) %>% ungroup() # 如果只需要保留每组出现频率最高的前N对,比如前10,可加上下面的代码 # stat_result <- stat_result %>% group_by(group) %>% slice_max(n, n = 10)
逻辑说明
- 用
group_by按group字段拆分数据 - 用
group_modify对每个分组的子数据单独处理:逐行提取X1到X5的5个数值,用combn(m=2)生成所有两两组合,每组组合经过排序后拼接为字符串,避免a-b和b-a被识别为不同的对 - 用
table统计每个数值对的出现次数,按频次降序排序后输出 - 最终输出的
stat_result就是你需要的group、Pair、n三列格式的结果
内容的提问来源于stack exchange,提问作者Lyle Danley
相关产品推荐
相关产品推荐

