R语言如何按学生分组将列内的1转换为连续递增序号序列
实现代码(基于dplyr)
首先加载依赖包:library(dplyr)
构造示例测试数据:
# 示例数据构造 df <- data.frame( Student = rep(c(1,2,3), each = 4), Number = c(NA, NA, 1, 1, NA, 1, 1, 1, NA, NA, 1, 1) )
核心处理逻辑:
df_res <- df %>% # 按学生分组,保证计数仅在同学生范围内生效 group_by(Student) %>% mutate(Number = ifelse(!is.na(Number), cumsum(!is.na(Number)), NA)) %>% ungroup()
逻辑说明
- 按
Student字段分组后,对每个学生的记录单独处理 - 对
Number列非NA的位置做累计计数,每遇到一个非NA值就累加1,NA值保持不变,最终输出结果和需求完全匹配。
内容的提问来源于stack exchange,提问作者Monklife
相关产品推荐
相关产品推荐

