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

如何用dplyr生成排除当前观测的家庭残疾组内最大值变量

解决方法:生成组内排除当前观测的残疾人指示变量

针对你需要判断家庭中是否存在除自身外的残疾人的需求,这里提供两种基于dplyr的高效实现方案:


方法一:利用求和判断(适用于0/1变量)

由于diffany是0/1编码的变量(1=残疾,0=非残疾),我们可以通过计算家庭总残疾人数减去当前个体的残疾状态,直接判断是否存在其他残疾人:

library(dplyr)

# 示例数据
cps <- data.frame(householdid = c(1,1,1,2,2,2,2,3,3,3,4,4,4,4,5,5,5,5,5), 
                  diffany = c(1,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0))

# 生成目标变量
cps <- cps %>%
  group_by(householdid) %>%
  mutate(has_other_disabled = as.integer(sum(diffany, na.rm = TRUE) - diffany > 0)) %>%
  ungroup()

逻辑说明

  • sum(diffany, na.rm = TRUE):计算当前家庭内所有成员的残疾总人数(自动忽略NA值)
  • 减去当前个体的diffany,得到除自身外的家庭残疾人数
  • 若结果大于0,说明存在其他残疾人,用as.integer()将布尔判断结果转为1/0格式

方法二:直接取排除当前行的最大值(通用型)

如果你的变量不是0/1格式(比如表示残疾程度的连续值),或者需要严格取组内除当前观测外的最大值,可以用cur_group_rows()定位当前行,排除后再计算最大值:

cps <- cps %>%
  group_by(householdid) %>%
  mutate(has_other_disabled = as.integer(max(diffany[-cur_group_rows()], na.rm = TRUE))) %>%
  ungroup()

逻辑说明

  • cur_group_rows():返回当前分组内的行索引
  • diffany[-cur_group_rows()]:提取组内除当前观测外的所有diffany值
  • max(..., na.rm = TRUE):取这些值的最大值,再转为1/0格式(对应原变量0/1的场景,最大值1表示存在其他残疾人)

验证结果

处理后的数据核心列结果如下,完全符合需求:

householdiddiffanyhas_other_disabled
111
111
101
201
201
201
210
301
301
310
401
410
401
401
500
500
500
500
500

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:02:50