R中基于两列对tibble排序失效的问题排查及解决方法
问题根源
你最初的代码生效属于巧合,核心原因是你对valrank的计算逻辑理解存在偏差:
你写的valrank = min(ids)是为每个value分组赋值该组首次出现的行序号,所以整个排序的组间顺序是按value第一次在表中出现的先后排列,并非按count大小排列。
第一个示例中B、D、E、A、C的首次出现顺序,刚好和各组count的高低顺序一致,才让你误以为代码是按count排序。到第二个示例中,count最高的x3第一次出现在第4行,晚于x2(第1行)、x5(第2行),所以按min(ids)排序时x3自然排在后面,不符合你的预期。
解决方案说明
你自己修改后的代码逻辑是完全正确的:将valrank改为组内最大count值,再按valrank倒序排列,刚好实现了你要的「count最大值最高的分组排在最前,同一分组内按count倒序排列」的需求。
如果后续你需要调整为按分组的count总和排序,只需要将max(count)改为sum(count)即可。
补充简化写法
如果你的dplyr版本≥1.1.0,可以用.by参数省略手动分组和取消分组的步骤,代码更简洁:
dat_1 %>% arrange(desc(max(count)), value, desc(count), .by = value)
内容的提问来源于stack exchange,提问作者Electrino
相关产品推荐
相关产品推荐

