R语言按规则基于resp等三个变量生成新变量N1的实现方法
方案1:基础R实现(无需加载额外包)
直接使用嵌套的向量化ifelse()函数完成条件赋值,代码如下:
df$N1 <- ifelse(df$resp > 4, df$exp.1, ifelse(df$resp < 4, df$exp.2, NA))
方案2:dplyr 实现(逻辑更清晰,适合多条件场景)
结合mutate()和case_when()完成变量生成,避免多层ifelse嵌套的可读性问题,代码如下:
library(dplyr) df <- df %>% mutate(N1 = case_when( resp > 4 ~ exp.1, resp < 4 ~ exp.2, TRUE ~ NA_real_ # 剩余所有情况(即resp==4)赋值为数值型缺失值 ))
你之前用car::recode没成功是正常的,这个函数仅适合对单个变量的取值做映射重编码,而你需要的是根据一个变量的条件取另外两个变量的值,不属于单变量重编码的适用场景。
运行上述任意一种方案后,输出的df结构与你期望的结果完全一致:
resp exp.1 exp.2 N1 1 1 0.00 1.0 1.0 2 2 0.24 1.0 1.0 3 4 1.00 0.0 NA 4 3 1.50 0.0 0.0 5 5 0.00 0.3 0.0 6 7 0.40 0.2 0.4
内容的提问来源于stack exchange,提问作者noone
相关产品推荐
相关产品推荐

