如何按rank列值排序dplyr::group_split生成的子数据框列表?
解决方案
你可以通过以下步骤利用提取到的ranking向量重新排序sub_dfs列表:
- 将ranking列表转为数值向量:
lapply返回的是列表,需要先转成向量才能用于排序:
ranking_vec <- unlist(ranking)
- 获取排序索引:用
order()函数得到让ranking_vec升序排列的位置索引:
sorted_indices <- order(ranking_vec)
- 重新排序子数据框列表:用得到的索引重新提取
sub_dfs中的元素:
sorted_sub_dfs <- sub_dfs[sorted_indices]
更简洁的写法(结合purrr)
如果安装了purrr包,可以一步完成rank提取和排序,不用单独写函数:
library(purrr) # 提取每个子数据框的首个rank值为数值向量 ranking_vec <- map_dbl(sub_dfs, ~ as.numeric(.x[1, "rank"])) # 直接排序列表 sorted_sub_dfs <- sub_dfs[order(ranking_vec)]
这样处理后,sorted_sub_dfs就是按每个子数据框rank列首个值升序排列的子数据框列表,后续生成图表时按这个顺序遍历即可。
内容的提问来源于stack exchange,提问作者Isaac Feldman
相关产品推荐
相关产品推荐

