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

如何在R中仅当COD_PROV匹配时创建工资差值新变量?

解决R中跨数据集匹配城市计算薪资差值的问题

问题背景

需要基于COD_PROV(城市编码)匹配两个数据集,仅对编码相同的记录计算Real wage的差值。直接使用mutate按行相减时,因两个数据集行数不匹配(dataset2缺失部分COD_PROV),出现如下错误:

Error in mutate():
ℹ In argument: Wage difference = ... - dataset1$Real wage.
Caused by error:
! Wage difference must be size 105 or 1, not 106.
Run rlang::last_error() to see where the error occurred.

数据集示例

dataset1:

COD_PROV     Real wage 
1            1962,18
6            1742,85
5            1541,81
96           1612,2
4            1574
3            1823,53
103          1584,49
2            1666,21
7            1747,81
10           2066,42
8            1498,01
11           1871,34
9            1770,41
15           2240,03
16           1729,17
17           1773,38
13           1832,57

dataset2(缺失部分COD_PROV):

COD_PROV     Real wage 
1            4962,18
6            1542,85
5            3541,81
4            1564
3            1223,53
2            1446,21
7            1557,81
10           2226,42
8            1458,01
11           1843,34
16           1439,17
17           1883,38
13           1992,57

解决方案

步骤1:转换薪资列格式

数据中的薪资用逗号作为小数点分隔符,需先转换为数值型才能计算:

# 将逗号替换为点,转换为数值
dataset1$`Real wage` <- as.numeric(gsub(",", ".", dataset1$`Real wage`))
dataset2$`Real wage` <- as.numeric(gsub(",", ".", dataset2$`Real wage`))

步骤2:匹配编码并计算差值

使用dplyr包的连接函数,确保仅相同COD_PROV的记录对应计算:

方式一:左连接(保留dataset1所有记录)

保留dataset1的全部数据,无匹配的记录差值设为NA:

library(dplyr)

# 按COD_PROV左连接两个数据集,添加后缀区分原数据
combined_data <- left_join(dataset1, dataset2, by = "COD_PROV", suffix = c("_dataset1", "_dataset2"))

# 计算薪资差值
combined_data <- mutate(combined_data, `Wage Difference` = `Real wage_dataset1` - `Real wage_dataset2`)

方式二:内连接(仅保留双方都存在的编码)

只保留两个数据集都有对应COD_PROV的记录:

library(dplyr)

# 按COD_PROV内连接
combined_data <- inner_join(dataset1, dataset2, by = "COD_PROV", suffix = c("_dataset1", "_dataset2"))

# 计算薪资差值
combined_data <- mutate(combined_data, `Wage Difference` = `Real wage_dataset1` - `Real wage_dataset2`)

错误原因说明

直接使用dataset1$Real wage - dataset2$Real wage是按**行位置**强行相减,完全不考虑COD_PROV是否匹配,且两个数据集行数不一致,导致R无法生成长度匹配的新变量,因此报错。使用连接函数可以确保记录按COD_PROV`正确匹配,避免行数不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:53:23