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

在R语言中基于多列数值创建分组的问题

问题解决:正确分组逻辑实现

需求说明

基于Score1至Score4的分类创建分组规则:

  • 对照组:所有分数均属于对应低问题组的参与者
  • 实验组:只要有任意一项分数属于中/高问题组的参与者

原代码错误分析

你原来的代码使用了|(逻辑或),只要某一项符合低分组条件就判定为对照组,这完全违背了需求逻辑。正确的逻辑应该是:只有当所有分数都满足低分组条件时才归为对照组,否则归为实验组。

修正方案

方案1:使用case_when与逻辑与(&)

library(dplyr)

df <- df %>%
  mutate(Group = case_when(
    # 所有分数都符合低问题组条件才是对照组
    Score1 == "(25-30)" & 
    Score2 == "(0-5)" & 
    Score3 == "(12-20)" & 
    Score4 == "(1-20)" ~ "Control",
    # 其余情况均为实验组
    TRUE ~ "Experimental"
  ))

方案2:使用if_all更简洁实现(dplyr 1.0.0+版本支持)

利用if_all可以批量检查指定列是否都满足条件,代码更简洁:

library(dplyr)

df <- df %>%
  mutate(Group = if_all(Score1:Score4, ~ .x %in% c("(25-30)", "(0-5)", "(12-20)", "(1-20)")) 
         ? "Control" : "Experimental")

注:这里%in%后的向量对应各列的低问题组取值,确保每列的取值都在对应低分组范围内。

正确运行结果

ID  Score1  Score2  Score3  Score4        Group
1  A (25-30)   (0-5) (12-20)  (1-20)      Control
2  B (31-40)  (6-11) (21-42) (21-60) Experimental
3  C (41-60) (25-30) (43-55) (61-80) Experimental
4  D (25-30)  (6-11) (12-20)  (1-20) Experimental
5  E (25-30)   (0-5) (21-42)  (1-20) Experimental
6  F (25-30)   (0-5) (12-20)  (1-20)      Control

可以看到参与者D和E现在被正确分到了实验组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:05:21