在R中按S.NO分组为每组年龄数据首尾添加NA
R语言按分组为年龄数据首尾添加NA的解决方案
步骤1:构造原始数据集
先将你提供的原始数据加载到R环境中:
library(dplyr) library(tibble) # 原始数据集 df <- tibble( S.NO = c(123, 124, 124, 124, 125, 125, 126), AGE_1 = c(19, 18, 21, 28, 13, 19, 19), AGE_2 = c(24, 21, 28, 35, 19, 23, 21) )
步骤2:分组处理生成预期数据集
使用dplyr的分组功能,为每个分组添加首尾带NA的行:
result <- df %>% group_by(S.NO) %>% group_modify(function(data, key) { # 提取当前分组的首个AGE_1和最后一个AGE_2 first_age <- data$AGE_1[1] last_age <- data$AGE_2[nrow(data)] # 构造首行(AGE_1为NA,AGE_2取首个年龄)和末行(AGE_1取最后一个年龄,AGE_2为NA) top_row <- tibble(S.NO = key$S.NO, AGE_1 = NA, AGE_2 = first_age) bottom_row <- tibble(S.NO = key$S.NO, AGE_1 = last_age, AGE_2 = NA) # 合并首行、原分组数据、末行 bind_rows(top_row, data, bottom_row) }) %>% ungroup() # 查看最终结果 print(result)
代码说明
group_by(S.NO):按S.NO字段拆分数据集,单独处理每个分组group_modify:对每个分组执行自定义逻辑,data是当前分组的子数据集,key是分组的标识值- 提取分组内的首尾年龄值,构造符合要求的首尾行后,与原分组数据合并
ungroup():取消分组状态,得到完整的结果数据集
内容的提问来源于stack exchange,提问作者Hari
相关产品推荐
相关产品推荐

