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

如何用R识别列中连续5个NA并标记为指定值5X?

在R中标记连续5个NA的序列

下面提供两种匹配不同需求的实现方案,你可以按需选择:

方案1:为每个连续NA的位置标记"5X"

使用dplyr结合rle函数识别连续NA的长度,再为符合条件的位置添加标记:

library(dplyr)

# 构造与你提供的结构一致的示例数据集
df <- tibble(Outcome = c(rep(NA, 5), 0, 1, rep(NA, 5), 1, 2, rep(NA, 5)))

df <- df %>%
  mutate(
    # 计算每个位置所属的连续NA序列长度
    na_run_length = inverse.rle(within.list(rle(is.na(Outcome)),
                                     values = ifelse(values, lengths, 0))),
    # 为连续5个NA的位置标记"5X",其余位置留空
    `New Variable Column` = ifelse(na_run_length == 5, "5X", "")
  )

# 查看处理后的结果
print(df)

方案2:仅在连续5个NA的起始位置标记"5X"

如果只需要在每段连续5个NA的第一个位置标记,调整逻辑如下:

df <- df %>%
  mutate(
    na_run_length = inverse.rle(within.list(rle(is.na(Outcome)),
                                     values = ifelse(values, lengths, 0))),
    `New Variable Column` = case_when(
      na_run_length == 5 & lag(na_run_length, default = 0) != 5 ~ "5X",
      TRUE ~ ""
    )
  )

基础R实现(无需额外包)

如果不想依赖dplyr,用基础R也能完成:

# 构造示例数据集
df <- data.frame(Outcome = c(rep(NA, 5), 0, 1, rep(NA, 5), 1, 2, rep(NA, 5)))

# 计算连续NA的序列长度
r_obj <- rle(is.na(df$Outcome))
r_obj$values <- ifelse(r_obj$values, r_obj$lengths, 0)
na_run_length <- inverse.rle(r_obj)

# 生成标记列
df$`New Variable Column` <- ifelse(na_run_length == 5, "5X", "")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:45:42