如何用R基于hh_id计算家庭收入(hh_income)变量?
问题描述
现有如下数据:
| hh_id | indl | ind_salary | hh_income |
|---|---|---|---|
| 1 | 1 | 200 | |
| 1 | 2 | 450 | |
| 1 | 3 | 00 | |
| 2 | 4 | 1232 | |
| 2 | 5 | 423 |
其中,相同hh_id的个体属于同一家庭,需为每个家庭计算所有成员ind_salary的总和,并将该值填充到对应家庭所有成员的hh_income字段中。处理后的数据如下:
| hh_id | indl | ind_salary | hh_income |
|---|---|---|---|
| 1 | 1 | 200 | 650 |
| 1 | 2 | 450 | 650 |
| 1 | 3 | 00 | 650 |
| 2 | 4 | 1232 | 1655 |
| 2 | 5 | 423 | 1655 |
请问如何用R实现这一需求?
解决方案
注意事项
首先需要将ind_salary列转换为数值型,否则字符格式的"00"无法参与求和计算。以下提供两种常用实现方式:
方法一:基础R实现
- 构造原始数据框(模拟输入数据):
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 )
- 转换薪资字段为数值型:
df$ind_salary <- as.numeric(df$ind_salary)
- 计算家庭总收入并合并回原数据:
# 按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的语法更简洁,适合快速数据处理:
- 先安装并加载dplyr包(若未安装):
install.packages("dplyr") library(dplyr)
- 数据构造与处理一步完成:
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
相关产品推荐
相关产品推荐

