如何按特定顺序重排含重复指定名称的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
相关产品推荐
相关产品推荐

