R语言数据重塑与最大值筛选:将HAVE转换为WANT数据集
R 数据转换实现方案
原始数据集
HAVE 数据集
HAVE = data.frame( "WEEK"=c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2), "STUDENT"=c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3), "CLASS"=c('A', 'A', 'B', 'B', 'C', 'C', 'H', 'A', 'A', 'B', 'B', 'C', 'C', 'H', 'A', 'A', 'B', 'B', 'C', 'C', 'H', 'A', 'A', 'B', 'B', 'C', 'C', 'H', 'A', 'A', 'B', 'B', 'C', 'C', 'H', 'A', 'A', 'B', 'B', 'C', 'C', 'H'), "TEST"=c(1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1), "SCORE"=c(93, 97, 72, 68, 93, 51, 19, 88, 56, 53, 79, 69, 90, 61, 74, 50, 76, 97, 55, 63, 63, 59, 68, 77, 80, 52, 94, 74, 64, 74, 92, 98, 89, 84, 54, 51, 82, 86, 51, 90, 72, 86) )
目标数据集 WANT
WANT = data.frame( "WEEK"=c(1,1,1,2,2,2), "STUDENT"=c(1,2,3,1,2,3), "CLASS"=c('A','A','B','B','B','C'), "H"=c(19,61,63,74,54,86), "TEST1"=c(93,88,76,77,92,90), "TEST2"=c(97,56,97,80,98,72) )
需求说明
按 WEEK 和 STUDENT 分组,完成以下操作:
- 找出每组中
TEST=1时SCORE最大值对应的CLASS - 获取该
CLASS下TEST=2的SCORE - 添加
H列,值为每组中CLASS='H'对应的SCORE - 最终转换为
WANT的结构
实现代码(使用 dplyr 包)
library(dplyr) result <- HAVE %>% # 按周和学生分组 group_by(WEEK, STUDENT) %>% # 提取H类分数,标记TEST=1记录,计算TEST=1的最高分数 mutate( H = SCORE[CLASS == 'H'], is_test1 = TEST == 1, max_test1_score = max(SCORE[is_test1]) ) %>% # 筛选出TEST=1且分数为最大值的记录,得到目标CLASS filter(is_test1 & SCORE == max_test1_score) %>% # 关联同组同CLASS下TEST=2的分数 left_join( HAVE %>% filter(TEST == 2), by = c("WEEK", "STUDENT", "CLASS"), suffix = c("_test1", "_test2") ) %>% # 整理列名和结构 select( WEEK, STUDENT, CLASS, H = H_test1, TEST1 = SCORE_test1, TEST2 = SCORE_test2 ) %>% # 去重(避免同组多个CLASS出现相同最高分数的情况) distinct() %>% ungroup() # 查看结果 print(result)
代码解释
- 分组计算:通过
group_by按周和学生分组,提前计算每组的H类分数、TEST=1的标记及最高分数。 - 筛选目标CLASS:过滤出TEST=1且分数为最大值的记录,锁定需要的CLASS。
- 关联TEST2分数:用
left_join匹配同组同CLASS下TEST=2的分数。 - 结构整理:选择并重命名列,确保输出和WANT结构完全一致。
内容的提问来源于stack exchange,提问作者bvowe
相关产品推荐
相关产品推荐

