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

R语言:为值1后的NA行填充连续计数的实现方案

解决思路与实现代码

可以通过分组计数的方式实现需求,核心逻辑是先给每个1及其后续的NA划分独立分组,再在分组内生成连续递增的数值:

  1. 生成分组标识:用cumsum(!is.na(a))标记分组,每次遇到非NA的1时分组号自动加1,这样每个1和它后面的NA会被分到同一个组,最开始的NA分组号为0。
  2. 分组内生成计数:对每个分组,用row_number()获取组内行位置,分组号大于0时,该位置值就是需要的递增数值;分组号为0的部分保持NA即可。

对应的R代码实现(基于dplyr):

library(dplyr)

df <- tibble(a = c(NA, NA, 1, NA, NA, NA, 1, NA, NA))

df2 <- df %>%
  mutate(group = cumsum(!is.na(a))) %>%
  group_by(group) %>%
  mutate(a = ifelse(group == 0, NA, row_number())) %>%
  ungroup() %>%
  select(-group)

# 输出结果
df2

运行后得到的结果与预期一致:

# A tibble: 9 × 1
      a
  <int>
1    NA
2    NA
3     1
4     2
5     3
6     4
7     1
8     2
9     3

如果习惯用data.table,也可以用以下代码实现,逻辑相同:

library(data.table)

setDT(df)
df[, group := cumsum(!is.na(a))]
df[group != 0, a := .I - first(.I) + 1, by = group]
df[, group := NULL]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 17:45:05