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

R语言求助:如何按id在counter非缺失后用m列值填充seq列

解决方案:按分组填充指定位置后的序列值

首先模拟你的初始数据(对应图1):

library(dplyr)
library(tidyr)

# 模拟初始状态数据
initial_data <- tibble(
  id = rep(c(1, 2), each = 5),
  counter = c(NA, NA, 1, NA, NA, NA, 2, NA, NA, NA),
  m = c("A", "A", "A", "A", "A", "B", "B", "B", "B", "B"),
  seq = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)
)

你之前用fill(seq, .direction = "down")没成功,是因为fill只能填充seq列自身已有的非缺失值,但你的需求是基于counter列的非缺失位置,触发后续行的seq填充为对应m的值。可以通过标记填充范围来实现:

target_data <- initial_data %>%
  group_by(id) %>%
  # 标记每个组中counter首次出现非缺失值后的所有行
  mutate(fill_flag = cumsum(!is.na(counter)) >= 1) %>%
  # 对标记行填充m到seq,其余行保留原seq
  mutate(seq = ifelse(fill_flag, m, seq)) %>%
  select(-fill_flag) %>%
  ungroup()

# 查看目标状态数据(对应图2)
print(target_data)

代码说明:

  • cumsum(!is.na(counter)) >= 1:通过累计求和,将每个组中第一个counter非缺失值及之后的所有行标记为TRUE
  • ifelse(fill_flag, m, seq):仅对标记为TRUE的行,把seq替换为同组的m值,之前的行保持NA

内容的提问来源于stack exchange,提问作者Luis M. García

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 06:42:10