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

R语言统计从最后一周开始的连续终端缺失周数的实现方法

解决代码(基于data.table)

先构造示例数据并运行核心计算逻辑:

library(data.table)
# 读取示例数据
df <- fread(text = "week   county  tot_pct
1      1       2
2      1       3.5
3      1       4
4      1       NA
5      1       NA
6      1       8
7      1       9
8      1       9.3
9      1       NA
10     1       NA
1      2       NA
2      2       4
3      2       9
4      2       NA
5      2       NA
6      2       9.3
7      2       10
8      2       11
9      2       13
10     2       14.5
1      3       2
2      3       7
3      3       8.2
4      3       9
5      3       10
6      3       11.2
7      3       NA
8      3       NA
9      3       NA
10     3       NA")

# 核心计算逻辑
result <- df[order(county, -week), 
             .(term_miss_weeks = {
               rl <- rleid(is.na(tot_pct))
               ifelse(is.na(tot_pct[1]), sum(rl == rl[1]), 0)
             }),
             by = county]

# 输出验证
print(result)

运行后输出和预期完全一致:

county term_miss_weeks
1:      1               2
2:      2               0
3:      3               4

逻辑说明

  1. 先按county分组,组内按week倒序排列,确保每个区县的最大周数据排在分组第一行
  2. 用rleid(is.na(tot_pct))生成连续相同NA状态的分组ID,所有连续NA会被分到同一个ID,连续非NA也会被分到同一个ID
  3. 判断倒序后第一行(也就是最大周的数据)是否为NA:如果不是直接返回0;如果是,统计当前分组的行数,就是从最大周开始连续NA的数量

原代码问题

原来的代码没有对周次倒序排列,也没有限定只取最大周开始的首个连续NA分组,额外加的lag筛选条件也会过滤掉起始的NA值,所以无法得到正确结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:54:02