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

如何用R基于hh_id计算家庭收入(hh_income)变量?

问题描述

现有如下数据:

hh_idindlind_salaryhh_income
11200
12450
1300
241232
25423

其中,相同hh_id的个体属于同一家庭,需为每个家庭计算所有成员ind_salary的总和,并将该值填充到对应家庭所有成员的hh_income字段中。处理后的数据如下:

hh_idindlind_salaryhh_income
11200650
12450650
1300650
2412321655
254231655

请问如何用R实现这一需求?


解决方案

注意事项

首先需要将ind_salary列转换为数值型,否则字符格式的"00"无法参与求和计算。以下提供两种常用实现方式:

方法一:基础R实现

  1. 构造原始数据框(模拟输入数据):
df <- data.frame(
  hh_id = c(1,1,1,2,2),
  indl = c(1,2,3,4,5),
  ind_salary = c("200", "450", "00", "1232", "423"),
  hh_income = NA,
  stringsAsFactors = FALSE
)
  1. 转换薪资字段为数值型:
df$ind_salary <- as.numeric(df$ind_salary)
  1. 计算家庭总收入并合并回原数据:
# 按hh_id分组计算薪资总和
hh_total <- aggregate(ind_salary ~ hh_id, data = df, sum)
# 修改列名为目标字段名
names(hh_total)[2] <- "hh_income"
# 合并到原数据框
df <- merge(df, hh_total, by = "hh_id")

方法二:tidyverse(dplyr)实现

tidyverse的语法更简洁,适合快速数据处理:

  1. 先安装并加载dplyr包(若未安装):
install.packages("dplyr")
library(dplyr)
  1. 数据构造与处理一步完成:
df <- tibble(
  hh_id = c(1,1,1,2,2),
  indl = c(1,2,3,4,5),
  ind_salary = c("200", "450", "00", "1232", "423"),
  hh_income = NA
) %>%
  # 转换薪资为数值型
  mutate(ind_salary = as.numeric(ind_salary)) %>%
  # 按家庭分组计算总收入并填充
  group_by(hh_id) %>%
  mutate(hh_income = sum(ind_salary, na.rm = TRUE)) %>%
  # 取消分组(可选,不影响后续操作)
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:15:38