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

基于tidyverse的单周期LOCF实现需求(R语言)

Tidyverse实现仅填充连续NA段的首个NA(忽略开头NA)

简洁dplyr实现

library(dplyr)

x <- c(NA, 3, 4, 5, 6, NA, NA, NA, 7, 8, 9 ,10, NA, NA, NA, 11, NA, 13)
goal <- c(NA, 3, 4, 5, 6, 6, NA, NA, 7, 8, 9 ,10, 10, NA, NA, 11, 11, 13)

# 核心逻辑:仅替换紧跟非NA值后的第一个NA
filled_x <- ifelse(
  is.na(x) & !is.na(lag(x)),  # 定位需要替换的NA:连续NA段的首个且非开头NA
  lag(x),                     # 用前一个非NA值填充
  x                           # 其余值保持原样
)

# 验证结果匹配度
all.equal(filled_x, goal)
#> [1] TRUE

数据框场景的tidyverse完整流程

如果是在数据框中处理列,可以结合tibble和mutate:

library(tidyverse)

df <- tibble(original = x) %>%
  mutate(
    filled = case_when(
      is.na(original) & !is.na(lag(original)) ~ lag(original),
      TRUE ~ original
    )
  )

# 查看处理后结果
df$filled
#> [1] NA  3  4  5  6  6 NA NA  7  8  9 10 10 NA NA 11 11 13

逻辑说明

核心是精准定位需要替换的NA:

  • is.na(x) 标记所有NA位置
  • !is.na(lag(x)) 筛选出前一个位置是非NA的情况
  • 两者取交集,刚好对应连续NA段的第一个NA,且自动忽略开头的连续NA(开头NA的前一个值也是NA,不会触发替换)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:25:11