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

使用Igraph计算ego网络triad census并生成对应计数数据集

解决方法

首先确保你已经加载了igraph包,可选加载dplyr简化数据处理步骤,以下是可直接运行的完整代码:

# 加载依赖包
library(igraph)
library(dplyr)

# 读入示例数据
df <- read.table(text="student_id alter
 1     3
 2     5
 2     2
 2     3
 3     2
 3     4
 3     5
 4     1
 4     6
 4     3
 5     1
 5     6
 5     2
 6     5
 6     2
 6     1
 7     8
 8     9
 9     8
 9     7
10     7
10     9
11    19
11    15
11    12
12    20
12    19
12    11
13    15
13    19
13    11
14    16
14    12
14    18
15    17
15    20
15    17
16    14
16    19
16    20
16    13
17    20
17    18
17    13
17    14
18    13
18    19
18    17
19    17
19    16
19    11
20    13
20    17
20    11
20    1", header = TRUE)

# 原有逻辑生成ego网络列表和三元组普查结果
g <- graph_from_data_frame(df, directed = TRUE)
egonet_list <- make_ego_graph(g, order = 1, mode = "out") 
triads <- lapply(egonet_list, triad.census)

# 新增转换为目标格式的代码
# 将三元组列表转为数据框
triad_df <- do.call(rbind, triads) %>% as.data.frame()
# 匹配对应的student_id(ego节点ID)
triad_df$student_id <- as.numeric(names(egonet_list))
# 设置列名,和目标格式完全对齐
colnames(triad_df) <- c(
  "triad_003", "triad_012", "triad_102", "triad_021D", "triad_021U", "triad_021C",
  "triad_111D", "triad_111U", "triad_030T", "triad_030C", "triad_201", "triad_120D",
  "triad_120U", "triad_120C", "triad_210", "triad_300", "student_id"
)
# 调整列顺序,将student_id放在第一列,按student_id升序排列
result <- triad_df %>% 
  select(student_id, everything()) %>% 
  arrange(student_id)

# 查看输出结果
print(result, row.names = FALSE)

如果不想依赖dplyr,可以用base R实现转换逻辑:

# base R版本转换代码
triad_df <- as.data.frame(do.call(rbind, triads))
triad_df$student_id <- as.numeric(names(egonet_list))
colnames(triad_df) <- c(
  "triad_003", "triad_012", "triad_102", "triad_021D", "triad_021U", "triad_021C",
  "triad_111D", "triad_111U", "triad_030T", "triad_030C", "triad_201", "triad_120D",
  "triad_120U", "triad_120C", "triad_210", "triad_300", "student_id"
)
# 调整列顺序和排序
result <- triad_df[, c(ncol(triad_df), 1:(ncol(triad_df)-1))]
result <- result[order(result$student_id), ]

逻辑说明

  • make_ego_graph返回的列表顺序和原图顶点顺序完全一致,列表的名称就是对应ego节点的ID,直接提取即可匹配student_id
  • triad.census返回的16个计数的顺序和需求的列顺序完全对应,直接设置列名即可
  • 最终输出的result就是所需的结构化统计数据集,和示例目标格式完全匹配。

内容的提问来源于stack exchange,提问作者L. Tucker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 09:00:03