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

R语言:基于学生修课计数替换学期尝试学时列的NA值

NA值回填实现方案

适配你已生成的attempts统计表的回填方法

你已经完成了缺失值学生的修课数统计,只需两步即可完成值回填:

  • 先在统计结果上计算好对应学时值,精简关联字段:
attempts <- attempts %>%
  mutate(calc_hrs = n * 3) # 修课数*单科学时3,得到目标替换值
  select(ID, calc_hrs) # 仅保留ID和目标值,避免关联时引入多余字段
  • 将计算值按ID关联回原数据集,替换对应NA值:
IR_Data <- IR_Data %>%
  left_join(attempts, by = "ID") %>%
  mutate(
    # 原列值为NA时取计算的学时值,非NA的原值完整保留
    HRS_Sem1Attempted = coalesce(HRS_Sem1Attempted, calc_hrs)
  ) %>%
  select(-calc_hrs) # 删除临时关联的计算列,保持原表结构

一步到位的简化实现(推荐)

无需单独生成中间的attempts统计表,直接在原数据集上完成计算和替换,逻辑更连贯,也能避免关联匹配偏差:

IR_Data <- IR_Data %>%
  group_by(ID) %>% # 按学生ID分组
  mutate(
    HRS_Sem1Attempted = ifelse(
      is.na(HRS_Sem1Attempted), # 判断当前位置是否为需要替换的NA
      n() * 3, # 分组内总修课数*单科学时3,作为替换值
      HRS_Sem1Attempted # 非NA的记录保留原值
    )
  ) %>%
  ungroup() # 取消分组,避免后续操作受分组状态影响

逻辑说明:代码会自动识别每个学生的总修课行数,仅对该学生下属于NA的HRS_Sem1Attempted位置填入计算值,和你定义的“学生总尝试学时=修课行数*3”规则完全匹配。

结果验证

回填完成后可快速抽查关键学生的替换结果是否符合预期:

IR_Data %>%
  filter(ID %in% c(189, 323)) %>%
  select(ID, HRS_Sem1Attempted)

预期输出:学生189的对应行HRS_Sem1Attempted值为9,学生323的对应行HRS_Sem1Attempted值为12。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 13:15:03