R语言实现不同基期多国月度价格指数的分组计算
问题原因
原有代码分组逻辑错误:group_by(Country,Date)会将「国家+单一日期」作为独立分组,每组仅包含1行观测,因此pmin(Date)只能返回每行自身的日期,无法提取国家维度的统一最早基期。
实现代码
library(dplyr) df <- df %>% # 仅按国家维度分组,保证同国家所有观测在同一分组内计算 group_by(Country) %>% mutate( # 提取当前国家的最早观测日期作为基期 Base_Date = min(Date), # 匹配基期对应的基准金额,若存在同日期多条观测取第一条避免报错 base_amount = Amount[Date == Base_Date][1], # 按定基指数公式计算,结果保留2位小数,与示例数值逻辑一致 PriceIndex = round((Amount / base_amount - 1) * 100, 2) ) %>% # 删除计算过程生成的临时列 select(-base_amount) %>% ungroup()
计算逻辑说明
- 分组规则修正:移除分组中多余的
Date维度,仅保留Country作为分组键,确保同一国家的所有数据参与组内计算 - 基期提取:直接用
min(Date)获取每个国家的最早观测日期,作为该国统一的价格指数基期 - 指数公式:定基价格指数计算逻辑为
(当期金额 / 基期金额 - 1) * 100,基期指数固定为100,计算结果保留2位小数,和给出的示例数值完全匹配 - 异常兼容:如果某国存在多条相同最早日期的观测,代码默认取第一条匹配到的金额作为基准值,避免计算报错
内容的提问来源于stack exchange,提问作者Zuzana
相关产品推荐
相关产品推荐

