在R中如何基于tidygraph列表元素的name列对列表进行重排序?
解决方案
你只需要在生成索引的步骤中,先统计每个name特征对应的组大小,排序时优先按组大小降序排列即可,完整实现代码如下:
library(tidygraph) library(purrr) library(tidyr) library(dplyr) ind <- map(myList, function(x){ x %>% pull(name) %>% replace_na("..") %>% paste0(collapse = "") }) %>% unlist(use.names = FALSE) %>% as_tibble() %>% mutate(ids = row_number()) %>% group_by(value) %>% mutate(group_n = n()) %>% # 统计当前name特征对应的组总元素个数 ungroup() %>% arrange(-group_n, value) %>% # 优先按组大小降序,同name特征的元素集中排列 pull(ids) myListNew <- myList[ind]
运行后myListNew的顺序和你期望的手动排序结果完全一致:前3个是name为x4,NA,NA的对象,中间2个是name为x4,x2,NA,NA,x1,NA,NA的对象,最后1个是name为x1,x2,NA的对象。
内容的提问来源于stack exchange,提问作者Electrino
相关产品推荐
相关产品推荐

