在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
相关产品推荐
相关产品推荐

