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

如何在R语言中按学生和季度计算跨年度分数差值生成WANT列

计算学生同学期跨年度成绩差值

需求说明

给定如下R数据框:

DATA = data.frame(STUDENT = c(1,1,1,1,1,1,2,2,2,2,2, 3,3,3),
                  YEAR = c(2000, 2000, 2000, 2001, 2001, 2001, 2000, 2000, 2001, 2001, 2001, 2001, 2001, 2001),
                  TRIMESTER= c(1,2,3,1,2,3,2,3,1,2,3,1,2,3),
                  SCORE = c(5,7,8,9,10,3,4,6,3,1,2,3,6, 9),
                  WANT = c(NA,NA,NA,4,3,-5,NA,NA,NA,-3,-4,NA,NA,NA))

需要生成WANT列,规则为:对每个学生,仅当存在上一年同学期的成绩记录时,计算当前年份成绩与上一年同学期成绩的差值;若无对应记录则填充NA。

解决方案

方法1:使用dplyr包

通过分组、排序后,利用lag()函数获取上一年的成绩并计算差值:

library(dplyr)

# 计算WANT列
DATA <- DATA %>%
  # 按学生ID和学期分组
  group_by(STUDENT, TRIMESTER) %>%
  # 组内按年份排序
  arrange(YEAR, .by_group = TRUE) %>%
  # 计算当前成绩与上一年同学期成绩的差值
  mutate(WANT_CALC = SCORE - lag(SCORE)) %>%
  # 取消分组
  ungroup()

# 查看结果
print(DATA)

方法2:使用data.table包

利用data.table的分组移位操作实现:

library(data.table)

# 转换为data.table格式
setDT(DATA)
# 按学生ID和学期分组,计算当前成绩与上一年同学期成绩的差值
DATA[, WANT_CALC := SCORE - shift(SCORE), by = .(STUDENT, TRIMESTER)]

# 查看结果
print(DATA)

结果验证

两种方法生成的WANT_CALC列与原数据中的WANT列完全一致,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:40:29