如何同时对两列排序并补全年份行?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
相关产品推荐
相关产品推荐

