R语言使用dplyr计算财年半年度增长率出现NA值求助
问题根因及修复方案
- 分组逻辑错误:
group_by中包含了半年度字段half,导致每个分组仅存在单条对应半年度的数据,调用偏移量为2的lag函数时没有前置行可供取值,所有结果自然返回NA。计算同业务维度跨期增长率时,分组仅需保留identifer、name、business三个业务维度字段即可。 - 缺少排序逻辑:
lag函数默认按照分组内的现有行顺序计算偏移,必须先按half字段做升序排序,才能保证偏移2位取到的是去年同期半年度的数值,避免行顺序混乱导致计算结果错误。
另外你示例代码中的重复函数参数顺序写反,生成的各字段长度不匹配,修正后可直接运行测试:
library(dplyr) library(magrittr) t <- c(3000,2000, 6000) u <- c("FY18H1", "FY18H2", "FY19H1", "FY19H2", "FY20H1", "FY20H2") x <- c(1,2,3,4,5) y <- c("a","b","c","d","e") z <- c("apples","oranges") identifer <- sort(rep(x, each = 6)) name <- sort(rep(y, each =6)) business <- sort(rep(z, each=15)) half <- rep(u, each = 5) dollars <- rep(t, each = 10) df <- data.frame(identifer,name, business,half, dollars) df <- df %>% group_by(identifer, name, business) %>% arrange(half, .by_group = TRUE) %>% mutate( YoY_GROWTH_DOLLARS = dollars - lag(dollars, 2), YoY_GROWTH_RATE = round(YoY_GROWTH_DOLLARS/lag(dollars,2),4) )
内容的提问来源于stack exchange,提问作者Crash_Overide
相关产品推荐
相关产品推荐

