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

使用dplyr按行分组填充列的高效实现方法求助

使用dplyr高效填充分组内缺失值

问题场景

你有如下结构的数据集(示例已简化,实际包含更多行和列):

class section
a NA
b s1
c NA
d NA

a NA
b s2
c NA
d NA

a NA
b s3
c NA
d NA

数据以每组a、b、c、d为一个分组,a始终在b之前,c、d始终在b之后。需要将每组中b对应的section值,填充到同组的a、c、d行的section列中,期望结果如下:

class section
a s1
b s1
c s1
d s1

a s2
b s2
c s2
d s2

a s3
b s3
c s3
d s3

之前用for循环+if-else实现时,因数据量过大效率极低,希望用dplyr实现高效处理。

解决方案

通过生成分组标识+向量化填充的方式实现,具体代码如下:

library(dplyr)

# 假设你的数据框名为df
df <- df %>%
  # 生成分组ID:每遇到class为a时,开启新分组
  mutate(group_id = cumsum(class == "a")) %>%
  # 按分组处理,提取每组b对应的section值填充整组
  group_by(group_id) %>%
  mutate(section = section[class == "b"]) %>%
  # 取消分组并移除临时标识列(按需保留)
  ungroup() %>%
  select(-group_id)

代码说明

  • cumsum(class == "a"):利用class等于a时返回1的特性,累加后生成连续的分组ID,自动将每组a、b、c、d划为同一组。
  • group_by(group_id):按生成的分组ID执行组内操作。
  • section = section[class == "b"]:在每个分组内提取class为b对应的唯一有效section值,自动填充整组的section列,覆盖NA值。
  • 最后取消分组并移除临时的group_id,得到目标结果。

该方法为向量化操作,相比循环效率提升显著,适合处理大数据量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 19:09:54