统计数据库中同一行内最常共现的变量对频次
找出数据库中变量的共现频率
我正在处理一个大型数据库,希望找出哪些变量最常出现在同一行(即彼此的关联环境中)。每行可能包含20多个变量,且我并不知晓所有变量。
示例数据
var1 <- c("x", "x", "x", "x", "x", "x", "y", "y", "y", "y") var2 <- c("a", "a", "b", "b", "c", "d", "e", "e", "g", "h") data <- data.frame(cbind(var1, var2))
预期结果
| frequent contacts | n |
|---|---|
| x&a | 2 |
| x&b | 2 |
| y&e | 2 |
| x&c | 1 |
| x&d | 1 |
| y&g | 1 |
| y&h | 1 |
解决方案
针对多列变量的场景(每行20+个变量),可以用以下方法处理:
- 加载所需工具包
library(tidyverse)
- 生成两两变量组合并统计频率
co_occur <- data %>% rowwise() %>% # 提取当前行所有非NA变量 mutate(vars = list(na.omit(c_across(everything())))) %>% # 生成所有两两无重复组合 mutate(pairs = list(combn(vars, 2, paste, collapse = "&"))) %>% unnest(pairs) %>% # 统计组合出现次数 count(pairs, name = "n") %>% # 按频率降序排序 arrange(desc(n)) # 匹配预期结果的列名 colnames(co_occur) <- c("frequent contacts", "n") print(co_occur)
关键说明
c_across(everything())自动捕获当前行所有变量,无需提前知晓列名;combn(vars, 2)生成无重复的两两组合,避免重复统计(如x&a和a&x视为同一组合);na.omit()自动过滤空值,排除无效组合。
内容的提问来源于stack exchange,提问作者onlyjust17
相关产品推荐
相关产品推荐

