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

如何同时对两列排序并补全年份行?R语言数据处理需求

按指定年份顺序排序并补全年份序列的R实现

需要完成以下操作:

  • 按照1970,1971,1972,1973的固定顺序排列数据框K的YEAR列
  • 同一YEAR分组内,按AMOUNT列升序排序
  • 补全年份序列的行,确保每个年份的出现次数等于原始数据中该年份的最大出现次数,缺失行填充NA

原始数据

K <- data.frame("YEAR" = c(1970,1972,1973,1971,1972,1971,1973,1970,1970),
                "AMOUNT" = c(100,100,200,100,400,300,700,200,800),
                "DISTANCE" = c(12,3,9,12,25,26,10,7,15))

实现代码

# 1. 将YEAR转为指定顺序的因子,保证排序时遵循自定义年份顺序
K$YEAR <- factor(K$YEAR, levels = c(1970, 1971, 1972, 1973))

# 2. 按YEAR(自定义顺序)和AMOUNT升序排序
K_sorted <- K[order(K$YEAR, K$AMOUNT), ]

# 3. 计算原始数据中单个年份的最大出现次数
max_year_count <- max(table(K$YEAR))

# 4. 生成完整的年份序列:每个年份重复max_year_count次
full_year_sequence <- rep(c(1970, 1971, 1972, 1973), each = max_year_count)

# 5. 合并完整序列与排序后的数据,自动补全缺失行的NA
K_final <- merge(
  data.frame(YEAR = full_year_sequence),
  K_sorted,
  by = "YEAR",
  all.x = TRUE
)

# 可选:将YEAR从因子转回数值类型
K_final$YEAR <- as.numeric(as.character(K_final$YEAR))

最终结果

运行代码后,K_final的结构与期望结果一致(注:R中原生NA为缺失值类型,若需转为字符串"NA"可额外执行K_final[is.na(K_final)] <- "NA"):

> K_final
   YEAR AMOUNT DISTANCE
1  1970    100       12
2  1970    200        7
3  1970    800       15
4  1971    100       12
5  1971    300       26
6  1971     NA       NA
7  1972    100        3
8  1972    400       25
9  1972     NA       NA
10 1973    200        9
11 1973    700       10
12 1973     NA       NA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 12:09:59