You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何保持ID列原有顺序,对DataFrame的Value列分组排序

解决方案:保持ID原始出现顺序的分组排序

首先构造你的示例数据:

df <- data.frame(
  ID = c(37, 23, 51, 37, 23, 51),
  Value = c("+6", "+9", "+13", "-14", "-17", "-20"),
  stringsAsFactors = FALSE
)

方法一:Base R 实现

核心思路是利用match()获取ID的首次出现位置,以此作为排序依据:

# 提取ID的首次出现顺序
id_unique_order <- unique(df$ID)

# 按ID的首次出现顺序排序,自动将相同ID的行聚合,且保留组内原始顺序
df_sorted <- df[order(match(df$ID, id_unique_order)), ]

方法二:dplyr(Tidyverse)实现

如果习惯使用tidyverse工具链,可以通过因子指定排序层级:

library(dplyr)

# 提取ID的首次出现顺序
id_unique_order <- unique(df$ID)

# 将ID转为因子(指定levels为首次出现顺序),再排序
df_sorted <- df %>%
  mutate(ID = factor(ID, levels = id_unique_order)) %>%
  arrange(ID) %>%
  mutate(ID = as.integer(ID)) # 可选:将ID转回整数类型

两种方法最终得到的df_sorted都会符合你的要求:相同ID的行聚合在一起,ID的整体顺序严格遵循原数据的首次出现顺序(37→23→51),且每组内的Value顺序保持原数据的状态。

内容的提问来源于stack exchange,提问作者ginn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 16:23:15