R语言如何为数据框缺失日期插入行并对应填充NA
R语言补全数据框缺失日期并填充其余列为NA的实现方法
需求说明
已识别数据框中的缺失日期,需要将缺失的日期补入日期列,缺失日期对应的其余列值全部填充为NA。
基础R实现方法
你已有的前置代码如下:
# 加载lubridate包(make_date函数需要) library(lubridate) DF <- data.frame(Year = rep(1985, 4), Month = rep(1, 4), Day = c(1,2,5,6), Z = 7:10) colnames(DF)[4] <- "Data" DF$DATE <- make_date(year = DF$Year, month = DF$Month, day = DF$Day) FullSeq <- seq.Date(from = min(DF$DATE), to = max(DF$DATE), by = 1) Missing <- FullSeq[!FullSeq %in% DF$DATE]
在上述代码基础上,新增以下代码即可实现需求:
# 构造缺失日期对应的行,其余列设为NA missing_rows <- data.frame( Year = rep(NA, length(Missing)), Month = rep(NA, length(Missing)), Day = rep(NA, length(Missing)), Data = rep(NA, length(Missing)), DATE = Missing ) # 合并原数据和缺失行,按日期排序 DF_full <- rbind(DF, missing_rows) DF_full <- DF_full[order(DF_full$DATE), ] # 重置行号(可选) rownames(DF_full) <- NULL
tidyverse更简便实现方法
如果你常用tidyverse生态,可以用complete函数一步实现:
library(tidyverse) library(lubridate) DF %>% # 补全DATE列的所有连续日期 complete(DATE = seq.Date(min(DATE), max(DATE), by = "1 day"))
输出结果
两种方法得到的最终结果一致,如下:
Year Month Day Data DATE <dbl> <dbl> <dbl> <int> <date> 1 1985 1 1 7 1985-01-01 2 1985 1 2 8 1985-01-02 3 NA NA NA NA 1985-01-03 4 NA NA NA NA 1985-01-04 5 1985 1 5 9 1985-01-05 6 1985 1 6 10 1985-01-06
内容的提问来源于stack exchange,提问作者bic ton
相关产品推荐
相关产品推荐

