如何在R语言中按指定循环顺序重排含数千行的列
数据框按指定循环顺序排列的解决方案
你用match(v, g$x2)只能得到3行数据,是因为match仅返回每个目标值在x2中首次出现的索引,无法覆盖所有重复的年份行。要实现全量数据按2016,2017,2018循环排序,可通过给每个年份的重复项标记组内序号,再按序号+指定顺序排序的方式实现,以下是具体方法:
方法一:基础R实现
# 定义目标循环顺序 v <- c(2016, 2017, 2018) # 给每个年份的重复出现标记组内序号(第1次、第2次...) g$group_id <- ave(g$x1, g$x2, FUN = seq_along) # 先按组内序号排序,再按指定年份顺序排序 h <- g[order(g$group_id, match(g$x2, v)), ] # 查看x2列的排序结果 print(h$x2)
方法二:dplyr包实现(更简洁)
library(dplyr) v <- c(2016, 2017, 2018) h <- g %>% # 按年份分组,标记组内行号 group_by(x2) %>% mutate(group_id = row_number()) %>% ungroup() %>% # 先按组内序号排序,再按指定年份顺序排序 arrange(group_id, match(x2, v)) # 查看x2列的排序结果 print(h$x2)
执行后h$x2会输出期望的循环顺序:
[1] 2016 2017 2018 2016 2017 2018 2016 2017 2018
内容的提问来源于stack exchange,提问作者musa isah
相关产品推荐
相关产品推荐

