如何统计R语言tidygraph对象列表中节点同名列的出现频率
实现代码
我们可以通过为每个tidygraph的节点name列生成唯一标识、按标识分组统计频率的方式实现需求,完整代码如下:
library(tidygraph) library(dplyr) library(purrr) # 方法1:用字符串拼接生成分组标识,无需额外依赖 result <- myList %>% # 为每个tidygraph生成name列的唯一分组键 set_names(map_chr(., ~ { node_name <- pull(activate(., nodes), name) paste(node_name, collapse = "||") })) %>% # 按分组键拆分列表 split(names(.)) %>% # 每组处理生成最终对象 map(function(group) { # 取组内第一个对象为模板修改节点数据 group[[1]] %>% activate(nodes) %>% select(name) %>% # 保留name列,自动删除不需要的val列 mutate(frequency = length(group)) }) %>% # 转为无命名的列表,匹配预期输出格式 unname() # 方法2:用哈希算法生成分组标识,兼容性更强(避免name中包含拼接字符冲突) # 需先安装digest包:install.packages("digest") # library(digest) # result <- myList %>% # set_names(map_chr(., ~ digest(pull(activate(., nodes), name)))) %>% # split(names(.)) %>% # map(function(group) { # group[[1]] %>% # activate(nodes) %>% # select(name) %>% # mutate(frequency = length(group)) # }) %>% # unname()
执行后打印result即可得到你需要的输出样式。
内容的提问来源于stack exchange,提问作者Electrino
相关产品推荐
相关产品推荐

