使用dplyr扩展分组DataFrame:补全缺失日期并填充NA
补全分组DataFrame的缺失日期记录
针对你提供的分组DataFrame,要为每个id补全所有出现过的日期记录,缺失的value列填充NA,这里提供两种实用方法:
数据构造代码
id <- c("a", "a", "a", "b", "b", "b", "c") date <- c("2020-01-01", "2020-01-02", "2020-01-03", "2020-01-01", "2020-01-02", "2020-01-03", "2020-01-01") value <- rnorm(n = length(id)) df <- cbind.data.frame(id, date, value)
方法一:使用tidyr::complete(简洁高效)
借助tidyverse工具集里的complete函数,一键生成id和date的所有组合,自动填充缺失的value为NA:
library(tidyverse) df_complete <- df %>% complete(id, date)
执行后,id为"c"的记录会自动补上2020-01-02和2020-01-03的行,对应的value列是NA。
方法二:Base R实现(无需额外包)
如果不想加载第三方包,用基础R的expand.grid和merge也能实现:
# 生成所有id和日期的组合 all_pairs <- expand.grid(id = unique(df$id), date = unique(df$date), stringsAsFactors = FALSE) # 左连接原数据,补全缺失值 df_complete <- merge(all_pairs, df, by = c("id", "date"), all.x = TRUE)
expand.grid会创建所有可能的id-date配对,merge的all.x=TRUE参数确保保留所有配对,原数据中没有的记录会自动给value赋值NA。
内容的提问来源于stack exchange,提问作者Muhammad Kamil
相关产品推荐
相关产品推荐

