求助:如何基于个体条件创建家庭层面的二分变量
问题解决:家庭层面统一赋值二分变量
你的核心问题是代码的逻辑判断范围和优先级出错了,导致只给满足条件的个体赋值,而非全家统一赋值。正确的思路是先在家庭组内判断是否存在符合条件的成员,再将这个结果批量赋值给该家庭的所有成员。
错误原因分析
你原代码的逻辑有两个问题:
- 逻辑运算符优先级错误:
&的优先级高于|,所以var1 == 1 | var1 == 2 & any(var3 == 1)会被解析为var1 ==1 | (var1==2 & any(var3==1)),这不是你需要的“同一成员同时满足var1=1/2且var3=1”的判断。 - 条件范围错误:你把个体的
var1条件和家庭层面的any(var3)混合,没有判断同一个成员是否同时满足两个条件,再基于家庭整体结果赋值。
正确代码
dataset %>% group_by(householdID) %>% # 判断家庭内是否存在至少一个成员同时满足var1为1/2且var3为1,转成1/0 mutate(new_dichotomous = as.integer(any(var1 %in% c(1, 2) & var3 == 1))) %>% ungroup() # 可选操作,避免分组状态影响后续数据处理
代码说明
var1 %in% c(1,2):等价于var1 ==1 | var1 ==2,写法更简洁。any(var1 %in% c(1,2) & var3 ==1):遍历当前家庭的所有成员,只要有一个成员同时满足两个条件,就返回TRUE,否则返回FALSE。as.integer():将布尔值TRUE转为1,FALSE转为0,替代if_else写法更高效。
内容的提问来源于stack exchange,提问作者Lyra Johnson
相关产品推荐
相关产品推荐

