如何在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
相关产品推荐
相关产品推荐

