计算聚类间共现概率:基于R数据框的冲突配对分析
实现思路与代码示例
第一步:统一配对格式
因为不区分Cluster.x和Cluster.y的顺序,先把每行的两个聚类值按大小排序,生成标准化的配对列——这样不管是(4,2)还是(2,4),都会被统一成(2,4),自身配对比如(4,4)也能正常保留。
用基础R就能快速实现:
# 加载你的数据 df <- structure(list(Cluster.x = c(5L, 4L, 4L, 4L, 1L, 4L), Cluster.y = c(7L, 2L, 7L, 4L, 4L, 4L)), row.names = c(NA, 6L), class = "data.frame") # 生成排序后的配对列 df$cluster1 <- pmin(df$Cluster.x, df$Cluster.y) df$cluster2 <- pmax(df$Cluster.x, df$Cluster.y)
第二步:统计各配对的出现次数
接下来按标准化后的配对分组,统计每组的冲突次数。用dplyr会更直观,基础R的table函数也能搞定:
用dplyr的写法
library(dplyr) count_df <- df %>% group_by(cluster1, cluster2) %>% summarise(count = n(), .groups = "drop")
用基础R的写法
count_table <- table(df$cluster1, df$cluster2) count_df <- as.data.frame(count_table) %>% filter(Freq > 0) %>% rename(cluster1 = Var1, cluster2 = Var2, count = Freq)
第三步:计算配对概率
概率就是每个配对的计数除以总冲突次数(也就是数据框的总行数):
total <- nrow(df) count_df <- count_df %>% mutate(probability = count / total)
最终结果示例
运行完上面的代码,你会得到这样的结果:
cluster1 cluster2 count probability 1 1 4 1 0.1666667 2 2 4 1 0.1666667 3 4 4 2 0.3333333 4 4 7 1 0.1666667 5 5 7 1 0.1666667
额外说明
- 这种排序的方法彻底解决了配对顺序的问题,所有逻辑上相同的配对都会被归为一类。
- 自身配对(比如聚类4和4)的情况也被正确处理,不会出现重复统计的问题。
内容的提问来源于stack exchange,提问作者craszer
相关产品推荐
相关产品推荐

