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

R语言如何根据参考数据框条件填充空白关联矩阵

R语言实现诱捕个体共现矩阵填充

核心逻辑

你需要的共现次数矩阵本质是个体-诱捕事件关联矩阵和其转置矩阵的乘积,向量化运算效率极高,389×389的规模可以毫秒级完成计算,不需要手动写循环或ifelse判断。

实现代码

方法1:基础R实现(无需额外安装包)

# 可选:先过滤掉个体编号为空的无效记录
trap_df <- trap_df[!is.na(trap_df$individual), ]

# 生成个体-诱捕事件的0-1交叉表
ind_event_mat <- table(trap_df$individual, trap_df$trap.event)
# 矩阵相乘得到共现次数矩阵
my_sociomatrix <- ind_event_mat %*% t(ind_event_mat)
# 对角线设为0,符合你的需求
diag(my_sociomatrix) <- 0

# 可选:如果需要严格匹配你之前生成的names_list的行列顺序,加这一行
my_sociomatrix <- my_sociomatrix[names_list, names_list]

方法2:tidyverse风格实现

library(tidyverse)

my_sociomatrix <- trap_df %>%
  # 过滤无效记录+标记出现状态
  filter(!is.na(individual)) %>%
  mutate(val = 1) %>%
  # 转宽格式:行=个体,列=诱捕事件,缺失值填0
  pivot_wider(names_from = `trap event`, values_from = val, values_fill = 0) %>%
  column_to_rownames("individual") %>%
  as.matrix() %>%
  # 矩阵相乘得到共现矩阵
  `%*%`(t(.))

diag(my_sociomatrix) <- 0

结果验证

你可以用给出的示例数据测试:运行后my_sociomatrix["NA002", "NA03,41"]返回值为2,my_sociomatrix["NA002", "NA03,42"]返回值为0,和你预期的效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:57:02