R语言使用dplyr/tidyr实现跨组变量共现次数统计的方法
跨组变量共现统计实现方案
使用dplyr+tidyr的实现代码如下:
输出格式1:组合字符串+计数
library(dplyr) library(tidyr) df_out <- df_in %>% group_by(id) %>% # 同id下先对颜色排序,再生成所有两两组合并拼接为字符串,避免顺序导致的重复统计 summarise(colors = combn(sort(color), 2, paste, collapse = "-")) %>% ungroup() %>% count(colors)
运行上述代码可直接得到与示例完全一致的输出结果。
输出格式2:列联表
library(purrr) # 用于提取组合元素,如已加载tidyverse可省略 # 先生成两两组合的计数表 pair_count <- df_in %>% group_by(id) %>% summarise(pair = combn(sort(color), 2, list)) %>% unnest_longer(pair) %>% ungroup() %>% mutate( col1 = map_chr(pair, 1), col2 = map_chr(pair, 2) ) %>% count(col1, col2) # 补充对称的组合数据,保证列联表行列对称 full_pair <- bind_rows( pair_count, pair_count %>% rename(col2 = col1, col1 = col2) ) # 转换为宽格式列联表 contingency_table <- full_pair %>% pivot_wider( names_from = col2, values_from = n, values_fill = 0 ) %>% rename(` ` = col1) # 可选:将对角线数值替换为"-" all_colors <- unique(df_in$color) for (color in all_colors) { contingency_table[contingency_table$` ` == color, color] <- "-" }
内容的提问来源于stack exchange,提问作者maia-sh
相关产品推荐
相关产品推荐

