如何基于月度收入区间与工时计算小时工资区间及中点值?
计算小时工资区间及中点值解决方案
核心步骤
- 解析
haven_labelled类型的月度收入区间,提取上下限数值 - 用收入上下限分别除以月度工时,得到小时工资区间
- 基于小时工资区间计算中点值
代码实现(R语言)
假设使用haven处理标签数据,tidyverse做数据清洗和计算:
1. 构造/加载样本数据
library(haven) library(tidyverse) # 模拟样本数据(实际可替换为你的数据集) sample_data <- tibble( totpinc = haven::labelled( c(1, 2, 3), labels = c("1000-2000" = 1, "2001-3000" = 2, "3001-4000" = 3) ), mthhrs = c(160, 180, 200) )
2. 提取月度收入区间上下限
sample_data <- sample_data %>% mutate( # 将标签转为区间字符串 income_range = as.character(haven::as_factor(totpinc)), # 提取区间下限和上限 income_lower = as.numeric(str_extract(income_range, "^\\d+")), income_upper = as.numeric(str_extract(income_range, "\\d+$")) )
3. 计算小时工资区间与中点值
sample_data <- sample_data %>% mutate( # 计算小时工资上下限 hourly_wage_lower = income_lower / mthhrs, hourly_wage_upper = income_upper / mthhrs, # 计算小时工资中点 hourly_wage_mid = (hourly_wage_lower + hourly_wage_upper) / 2 )
4. 查看结果
# 筛选关键列展示 select(sample_data, totpinc, mthhrs, hourly_wage_lower, hourly_wage_upper, hourly_wage_mid)
期望输出示例
# A tibble: 3 × 5 totpinc mthhrs hourly_wage_lower hourly_wage_upper hourly_wage_mid <int> <dbl> <dbl> <dbl> <dbl> 1 1 160 6.25 12.5 9.38 2 2 180 11.1 16.7 13.9 3 3 200 15.0 20.0 17.5
特殊情况处理
如果收入区间包含"低于X"或"高于X"这类非闭合区间:
- 对于"低于1000",可将下限设为0,上限设为1000
- 对于"高于4000",可将下限设为4000,上限可根据数据分布设定合理值(如4000*1.5)或标记为NA
内容的提问来源于stack exchange,提问作者Victoria
相关产品推荐
相关产品推荐

