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

如何在R中基于分组变量生成Sem1与Sem2新列以分析教学顺序影响?

解决R中按分组生成学期成绩列的问题

针对你需要根据分组变量为成绩数据框生成Sem1和Sem2列的需求,这里提供两种简洁高效的实现方法,适配不同的代码习惯:

方法1:用dplyr的case_when(可读性优先,推荐)

如果你常用tidyverse工具链,case_when能清晰直观地定义分组逻辑,后续维护也更方便:

首先加载dplyr包:

library(dplyr)

接着对数据框进行处理:

# 假设你的原始数据框名为df
df <- df %>%
  mutate(
    Sem1 = case_when(
      Group == "A" ~ Chemistry,  # A组第一学期取化学成绩
      Group == "B" ~ English,    # B组第一学期取英语成绩
      TRUE ~ NA_real_            # 处理非A/B的异常分组(可选)
    ),
    Sem2 = case_when(
      Group == "A" ~ English,    # A组第二学期取英语成绩
      Group == "B" ~ Chemistry,  # B组第二学期取化学成绩
      TRUE ~ NA_real_
    )
  )

方法2:基础R的ifelse函数(轻量无依赖)

如果不想加载额外包,用基础R的ifelse也能快速完成需求:

# 直接为数据框添加新列
df$Sem1 <- ifelse(df$Group == "A", df$Chemistry, df$English)
df$Sem2 <- ifelse(df$Group == "A", df$English, df$Chemistry)

结果验证

用你提供的示例数据测试:

# 构造原始示例数据
df <- data.frame(
  ID = c(1,2,3,4),
  Group = c("A","B","B","A"),
  English = c(9,7,7,3),
  Chemistry = c(4,3,6,10)
)

运行上述代码后,得到的结果完全符合你描述的逻辑:

ID Group English Chemistry Sem1 Sem2
1  1     A       9          4    4    9
2  2     B       7          3    7    3
3  3     B       7          6    7    6
4  4     A       3         10   10    3

注:你提供的目标数据示例中第2、3行的Sem1/Sem2值似乎和描述的逻辑不符,大概率是输入笔误,上述代码严格按照你"A组第一学期学化学、第二学期学英语;B组顺序相反"的需求实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:37:02