如何使用egor包移除节点数少于10个的自我中心网络?
解决方法
错误原因
你代码报错的核心是误解了egor.obj$alter的结构:它不是按ego拆分的列表,而是单一数据框,每行对应一个alter,包含egoID列关联对应的自我。你用map_dbl去遍历它,相当于把数据框的列当成列表元素处理,自然会出现$ operator is invalid for atomic vectors的错误。
正确代码步骤
先加载依赖包:
library(egor) library(tidyverse)
- 统计每个ego的网络规模
从alter数据中按egoID分组计数,得到每个自我的网络大小:
ego_netsize <- egor.obj$alter %>% count(egoID, name = "netsize")
- 合并网络规模到ego数据并过滤
把统计结果合并到ego属性表,同时移除网络规模小于10的自我:
egor.obj$ego <- egor.obj$ego %>% left_join(ego_netsize, by = "egoID") %>% filter(netsize >= 10)
- 同步过滤alter数据
确保alter数据只保留过滤后剩下的ego对应的记录:
egor.obj$alter <- egor.obj$alter %>% filter(egoID %in% egor.obj$ego$egoID)
补充说明
- 用
count统计行数比你原来的max(.x$nodeID)更准确,因为nodeID可能存在不连续的情况,行数才是真实的网络成员数量。 - 同步过滤alter数据是必须的,否则egor对象里的ego和alter会出现不匹配的情况。
内容的提问来源于stack exchange,提问作者Kristen
相关产品推荐
相关产品推荐

