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

如何按特定顺序重排含重复指定名称的DataFrame

重排DataFrame:按ID分组并保留原始出现顺序

问题背景

现有一个1044行的R DataFrame:

  • id列包含87个唯一名称,按固定顺序循环重复12次(1044 ÷ 87 = 12)
  • 需求:将同一id的所有行集中在一起,同时保留这些行在原DataFrame中的出现顺序(例如Name1的行依次为原第1、88、175...行)

解决方案

方法1:基础R实现

通过为每个id的出现添加序号标记,再按id和序号排序,确保顺序符合要求:

# 为每个id的出现添加序号(第1次、第2次...)
data$occurrence <- ave(seq_len(nrow(data)), data$id, FUN = seq_along)

# 按id和序号重排数据
data_reordered <- data[order(data$id, data$occurrence), ]

# 可选:删除临时添加的occurrence列
data_reordered$occurrence <- NULL

方法2:dplyr包实现

使用tidyverse风格的语法,更简洁直观:

library(dplyr)

data_reordered <- data %>%
  # 按id分组,为每组添加行号(标记出现顺序)
  group_by(id) %>%
  mutate(occurrence = row_number()) %>%
  ungroup() %>%
  # 按id和出现顺序排序
  arrange(id, occurrence) %>%
  # 移除临时列
  select(-occurrence)

验证结果

运行以下代码查看重排后的前几行,确认Name1的行按原始出现顺序集中:

head(data_reordered)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 17:20:18