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

R语言如何忽略C值、用上一行取值填充指定列空单元格

实现逻辑

你要的填充规则可以拆解为遍历V2列,遇到空值时校验上一行的取值:如果上一行取值不是C,就用上一行的值填充当前空单元格;如果上一行取值是C,当前空单元格保持为空即可。

基础R实现代码

不需要加载任何第三方包,直接通过循环处理:

df <- data.frame(
  'ID' = c(1,   2,  3,  4,  5,  6,  7,  8,  9,  10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23)
  ,'V1' = c("desc1",    "desc2",    "desc3",    "desc4",    "desc5",    "desc6",    "desc7",    "desc8",    "desc9",    "desc10",   "desc11",   "desc12",   "desc13",   "desc14",   "desc15",   "desc16",   "desc17",   "desc18",   "desc19",   "desc20",   "desc21",   "desc22",   "desc23")
  ,'V2' =c("A", "", "", "B",    "", "", "", "C",    "", "A",    "", "", "", "B",    "", "", "C",    "", "A",    "B",    "", "C",    ""))

# 填充处理
for (i in 2:nrow(df)) {
  if (df$V2[i] == "" && df$V2[i-1] != "C") {
    df$V2[i] <- df$V2[i-1]
  }
}

tidyverse 简洁实现

如果你习惯用dplyr语法,可以用分组填充的方式实现:

library(dplyr)

df <- df %>%
  mutate(
    V2 = na_if(V2, ""),
    # 生成独立填充分组:遇到新的非空值、或者上一行是C时拆分新组
    fill_grp = cumsum(!is.na(V2) | lag(V2, default = "") == "C")
  ) %>%
  group_by(fill_grp) %>%
  mutate(V2 = first(V2)) %>%
  ungroup() %>%
  select(-fill_grp)

输出验证

处理后的V2列取值如下,完全符合预期规则:
"A","A","A","B","B","B","B","C","","A","A","A","A","B","B","B","C","","A","B","B","C",""


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:36:03