在R语言中实现产品编码命名对应及贸易值均分处理
R语言实现产品编码命名对应与贸易值均分
解决方案思路
要完成需求,需先统计每个旧产品编码对应的新产品编码数量,再将原贸易值按该数量均分,最后通过右连接关联所有新产品编码,确保总贸易值不变。以下是具体实现步骤:
代码实现
首先确保安装并加载dplyr包(用于数据处理):
# 若未安装dplyr,先执行安装 # install.packages("dplyr") library(dplyr)
然后按步骤处理数据:
# 创建原贸易数据集,将tradevalue转为数值型(原数据为字符,无法计算) products <- c("030799","030789","219090") tradevalue <- as.numeric(c("150","50","75")) df <- data.frame(products, tradevalue) # 创建新旧编码对应表 corr_table <- data.frame( products = c("030799","030799","030799","030789","030789","219090"), products.new = c("030749","030784","030788","030783","030787","219090") ) # 统计每个旧编码对应的新编码数量 corr_table <- corr_table %>% group_by(products) %>% mutate(match_count = n()) %>% # 计算分组内的行数(即匹配数) ungroup() # 右连接并计算均分后的贸易值 final_result <- corr_table %>% right_join(df, by = "products") %>% mutate(tradevalue.new = tradevalue / match_count) %>% # 按匹配数均分贸易值 select(products.new, products, tradevalue.new) # 按需保留列 # 查看最终结果 print(final_result)
结果说明
运行代码后会生成6行数据:
- 旧编码
030799的150贸易值均分为3个50,对应3个新产品编码 - 旧编码
030789的50贸易值均分为2个25,对应2个新产品编码 - 旧编码
219090的75贸易值保持不变,对应1个新产品编码
总贸易值与原数据一致(150+50+75=275),符合需求。
内容的提问来源于stack exchange,提问作者melange164
相关产品推荐
相关产品推荐

