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

基于NA出现情况为R语言数据框创建分组变量

问题描述

现有R语言数据框df:

df <- data.frame(x = c(1, 1, NA, 1, 1, NA, NA, 1, 1))

需要创建分组列y,满足以下规则:

  • 遇到NA时,y值在前一个基础上加1
  • 连续NA仅首次触发加1,后续y值保持不变

预期结果:

x  y
1  1  1
2  1  1
3 NA  2
4  1  2
5  1  2
6 NA  3
7 NA  3
8  1  3
9  1  3

解决方案1:Base R实现

核心思路是先标记首次出现的NA(即当前行是NA且上一行不是NA的位置),再对标记结果做累加运算,最后加上初始分组值1即可得到目标列y。

# 标记首次出现的NA位置:当前行是NA且前一行不是NA
na_first <- c(FALSE, diff(is.na(df$x)) == 1)
# 计算分组y:初始为1,累加首次NA的标记
df$y <- 1 + cumsum(na_first)

验证输出:

print(df)
#    x y
# 1  1 1
# 2  1 1
# 3 NA 2
# 4  1 2
# 5  1 2
# 6 NA 3
# 7 NA 3
# 8  1 3
# 9  1 3

解决方案2:dplyr实现

如果习惯使用tidyverse工具链,可借助dplyr的窗口函数完成逻辑:

library(dplyr)

df <- df %>%
  mutate(
    # 标记首次出现的NA
    na_first = lag(is.na(x), default = FALSE) != is.na(x) & is.na(x),
    # 累加标记得到分组
    y = 1 + cumsum(na_first)
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 19:32:38