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

如何在R语言中基于三个数值编码变量创建分组变量Group

修正分组变量的R代码实现

你的代码存在几个关键问题:

  • 多余的空group_by()调用,直接移除即可
  • ifelse语法错误:它仅接受三个参数(判断条件、条件为真时的取值、条件为假时的取值),你传入多个参数导致逻辑完全混乱
  • 逻辑运算符使用错误:未给每组条件添加括号明确优先级,且混用了向量级运算的|和标量级运算的||,此处应统一使用|
  • 分组标签未加引号:Group0这类标识需要写成字符串格式"Group0"

根据你的分组规则(Group0/Group3各对应1种变量组合,Group1/Group2各对应3种变量组合),用dplyr的case_when实现会更清晰易读:

data <- 
  data %>%  
  mutate(Group = case_when(
    # Group0:race=1 且 gen=1 且 sexor=1
    race == 1 & gen == 1 & sexor == 1 ~ "Group0",
    # Group1:三种指定组合
    (race == 1 & gen == 2 & sexor == 1) | 
    (race == 2 & gen == 1 & sexor == 1) | 
    (race == 1 & gen == 1 & sexor == 2) ~ "Group1",
    # Group2:三种指定组合
    (race == 2 & gen == 2 & sexor == 1) | 
    (race == 2 & gen == 1 & sexor == 2) | 
    (race == 1 & gen == 2 & sexor == 2) ~ "Group2",
    # Group3:剩余的唯一组合
    race == 2 & gen == 2 & sexor == 2 ~ "Group3"
  ))

如果一定要用ifelse,需要嵌套使用,但可读性远不如case_when:

data <- 
  data %>%  
  mutate(Group = ifelse(race == 1 & gen == 1 & sexor == 1, "Group0",
                       ifelse((race == 1 & gen == 2 & sexor == 1) | 
                              (race == 2 & gen == 1 & sexor == 1) | 
                              (race == 1 & gen == 1 & sexor == 2), "Group1",
                              ifelse((race == 2 & gen == 2 & sexor == 1) | 
                                     (race == 2 & gen == 1 & sexor == 2) | 
                                     (race == 1 & gen == 2 & sexor == 2), "Group2", "Group3"))))

注意:确保你的data数据框中确实存在race、gen、sexor三个数值型变量,且取值符合你设定的1/2范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:17:23