You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言高效统计两两个体同组共现次数的实现方法

R语言个体同组共现次数高效统计方案

针对169个体、千行级观测数据的场景,以下方案计算效率足够,可直接输出你需要的三种格式结果,同时规避之前生成空矩阵的问题。

前置处理

你提供的样例数据自带grouped_df分组属性,未解除分组直接做聚合操作大概率是之前结果为空的核心原因,第一步先做数据解组:

library(dplyr)
library(tidyr)
library(purrr)

# 解除原数据默认分组,避免后续操作受分组规则干扰
df <- your_data %>% ungroup()

核心计数逻辑

  • 按组号Gp.nr分组,提取每组内去重后的个体ID(同组内重复出现的同个个体仅计数1次,避免虚高)
  • 对每组个体列表生成无序两两配对(统一排序后拼接ID,保证Aa-Bd和Bd-Aa识别为同一个配对)
  • 累计所有组的配对出现次数
cooccur_res <- df %>%
  group_by(Gp.nr) %>%
  summarise(indiv_set = list(unique(as.character(IDIndividual1))), .groups = "drop") %>%
  mutate(
    dyad = map(indiv_set, ~{
      # 组内不足2个个体时无共现关系,直接跳过
      if(length(.x) < 2) return(NULL)
      combn(.x, 2, simplify = FALSE) %>%
        map_chr(~paste(sort(.x), collapse = "-"))
    })
  ) %>%
  unnest(dyad) %>%
  count(dyad, name = "Occurrence")

其他常见结果异常原因:未将因子类型的ID转为字符、未对配对ID做排序导致同个配对生成两个名称、未对同组内重复ID去重。

三种目标格式输出

1. 长表格式

核心计数结果直接重命名即为标准长表,也可按共现次数合并同次数的个体对:

# 基础长表:含Dyad(个体对)、Occurrence(共现次数)两个字段
long_format <- cooccur_res %>%
  rename(Dyad = dyad)

# 按共现次数合并个体对
long_merged <- long_format %>%
  group_by(Occurrence) %>%
  summarise(Dyad = list(Dyad), .groups = "drop")

2. 共现矩阵格式

行列均为个体ID,单元格值为两两个体同组共现次数:

# 获取数据集中所有出现过的个体全集
all_id <- unique(as.character(df$IDIndividual1))
# 初始化全0矩阵
cooccur_matrix <- matrix(
  0,
  nrow = length(all_id),
  ncol = length(all_id),
  dimnames = list(all_id, all_id)
)
# 拆分个体对填充矩阵
fill_data <- cooccur_res %>%
  separate(dyad, into = c("id1", "id2"), sep = "-")
cooccur_matrix[as.matrix(fill_data[, c("id1", "id2")])] <- fill_data$Occurrence
cooccur_matrix[as.matrix(fill_data[, c("id2", "id1")])] <- fill_data$Occurrence
# 对角线值可按需调整,这里默认设为NA(个体自身无共现意义)
diag(cooccur_matrix) <- NA

3. 宽表格式

每个两两个体对为单独列,单元格值为对应共现次数:

wide_format <- cooccur_res %>%
  pivot_wider(names_from = dyad, values_from = Occurrence, values_fill = 0)

效率说明

169个个体最多生成14196个无序配对,千行级观测数据下整个计算过程耗时在毫秒级,无性能瓶颈。

内容的提问来源于stack exchange,提问作者Josefien

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 00:31:04