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

对含重复元素的R语言向量进行连续重编号处理

问题:修复R向量中的数字跳跃,保留重复次数

原始R向量avec数据如下:

avec <- c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 
15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, 25L, 26L, 27L, 
28L, 29L, 30L, 31L, 31L, 31L, 31L, 31L, 31L, 31L, 31L, 31L, 31L, 
31L, 31L, 31L, 44L, 44L, 44L, 47L, 47L, 47L, 47L, 51L, 51L, 51L, 
51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 52L, 
52L, 52L, 52L, 52L, 52L, 52L)

查看向量的重复情况:

table(avec)
# 输出:
#  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 44 47 51 52 
#  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1 13  3  4 15  7 

该向量存在数字跳跃(如缺失32至43、45至46等),需要将其修改为连续无跳跃的序列,同时保留每个值的重复次数,期望输出如下:

avec <- c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 
15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, 25L, 26L, 27L, 
28L, 29L, 30L, 31L, 31L, 31L, 31L, 31L, 31L, 31L, 31L, 31L, 31L, 
31L, 31L, 31L, 32L, 32L, 32L, 33L, 33L, 33L, 33L, 34L, 34L, 34L, 
34L, 34L, 34L, 34L, 34L, 34L, 34L, 34L, 34L, 34L, 34L, 34L, 35L, 
35L, 35L, 35L, 35L, 35L, 35L)

最简解决方案

利用因子的特性,将原始向量的唯一值映射为连续整数:

# 提取排序后的唯一值
unique_sorted <- sort(unique(avec))
# 将向量转换为因子,再转为整数类型
avec_fixed <- as.integer(factor(avec, levels = unique_sorted))

说明

  • sort(unique(avec)) 获取向量中所有唯一值并按升序排列,确保映射的连续性。
  • factor(avec, levels = unique_sorted) 将原始向量转换为因子,每个原始值对应排序后唯一值序列中的位置。
  • as.integer() 将因子转换为整数,得到连续无跳跃的序列,同时完全保留原始值的重复次数。

验证修复后的向量:

table(avec_fixed)
# 输出:
#  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 
#  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1 13  3  4 15  7 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 09:27:39