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

在R语言中填充Number列存在非连续数值的行

R语言填充数据框中Number列的缺失连续行

示例数据

先定义你的示例数据:

df <- data.frame(
  Var1 = c("A","A","B","B","B","C","C","D"),
  Number = c(10,11,120,123,124,50,52,30),
  Var2 = c(letters[1:8])
)

解决方案1:使用dplyr + tidyr

这是tidyverse风格的直观方案,适合普通规模数据:

library(dplyr)
library(tidyr)

filled_df <- df %>%
  group_by(Var1) %>%
  # 生成组内连续的Number序列,自动补全缺失行
  complete(Number = full_seq(Number, 1)) %>%
  # 前向填充Var2的缺失值,沿用前一行的取值
  fill(Var2, .direction = "down") %>%
  ungroup()

# 查看结果
print(filled_df)

解决方案2:使用data.table(适合大数据)

如果处理大规模数据集,data.table的运行效率更高:

library(data.table)

setDT(df)
filled_dt <- df[, .(Number = seq(min(Number), max(Number), 1)), by = Var1] %>%
  # 左连接原数据,保留所有连续Number行
  merge(df, by = c("Var1", "Number"), all.x = TRUE) %>%
  # 按Var1和Number排序,确保顺序正确
  setorder(Var1, Number) %>%
  # 按组前向填充Var2的缺失值
  .[, Var2 := nafill(Var2, type = "locf"), by = Var1]

print(filled_dt)

两种方案都会生成符合需求的结果:补全Number列的连续行,Var1保持同组取值,Var2沿用缺失行前一行的数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 20:23:14