You need to enable JavaScript to run this app. R语言Tidyverse环境下为全A、仅A/B成绩的学生创建哑变量
优惠活动
大模型
产品
解决方案
定价
更多

R语言Tidyverse环境下为全A、仅A/B成绩的学生创建哑变量

实现逻辑

完全匹配你给出的示例输出的判定规则如下:

  • 按学生id聚合所有科目成绩,逐人计算标记值,不需要对长表做宽表转换
  • all_As标记:该生所有科目成绩均属于A等级细分(兼容A+、A、A-等所有以A开头的成绩),符合记1,否则记0
  • As_and_Bs标记:该生所有科目成绩仅由A、B等级构成(无C及以下等级),且不属于全A学生集合(匹配示例中全A学生该标记为0的规则),符合记1,否则记0
可运行代码
library(dplyr)
library(stringr)

# 基于给定的original_df直接计算目标哑变量
result_df <- original_df %>%
  group_by(id) %>%
  summarise(
    all_As = as.integer(all(str_starts(grade, "A"))),
    As_and_Bs = as.integer(
      all(str_starts(grade, "A|B")) & !all_As
    )
  )
结果匹配校验

代码运行输出和你提供的目标summarized_df完全一致:

  • 001号学生:3科成绩分别为A+、A、A-,全A → all_As=1,As_and_Bs=0
  • 002号学生:3科成绩分别为A、B+、B-,仅含A/B类成绩且非全A → all_As=0,As_and_Bs=1
  • 003号学生:3科成绩分别为A、A、A-,全A → all_As=1,As_and_Bs=0
  • 004号学生:3科成绩含C类 → all_As=0,As_and_Bs=0
适配调整说明
  • 如果实际需求中As_and_Bs需要包含全A学生(即只要无C及以下等级成绩,不管是否全A都标记为1),删掉判定条件里的& !all_As即可
  • 若存在特殊成绩编码(比如文字等价等级),仅需修改str_starts的匹配范围,无需调整整体分组逻辑
  • 该方案不需要预先枚举所有可能的A/B类成绩值,后续新增A+、B-之类的细分等级时,代码可以直接兼容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 19:36:02