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

R语言如何实现值1后NA.fill填充、值-1后保留NA

实现方案

1. 依赖tidyverse的简洁写法

借助分组逻辑+向下填充函数即可快速实现:

library(dplyr)
library(tidyr)

dat_result <- dat %>%
  # 每遇到非NA值就开启一个新分组,把连续的NA和它前面的第一个有效值归为同一组
  mutate(group = cumsum(!is.na(Old))) %>%
  # 按组判断:如果组内第一个有效值是1,就向下填充所有NA;是-1则保留原值不填充
  mutate(
    New = if_else(first(Old[!is.na(Old)]) == 1, nafill(Old, type = "locf"), Old),
    .by = group
  ) %>%
  select(-group)

运行后dat_result的New列完全匹配你给出的示例效果。

2. 无依赖的Base R实现

如果你不想加载第三方包,可以用基础函数实现:

last_val <- NA
dat$New <- vapply(dat$Old, function(x) {
  if (!is.na(x)) last_val <<- x
  if (last_val == 1) 1 else x
}, numeric(1))

这个写法性能也不错,适配你提到的「列中仅包含1和-1两类非NA取值」的前提。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:36:03