R语言自动补全dataframe中OD流量表缺失行并赋值的实现方法
R补全OD流量表缺失行实现方案
有现成的函数可以直接实现该需求,以下是两种常用的实现方案:
方案1:tidyverse生态简洁实现(推荐)
使用tidyr包的complete()函数即可一键补全所有OD组合的缺失行,配合fill参数直接指定缺失行number列的默认值为1:
# 加载依赖包 library(tidyverse) # 原始数据 data <- data.frame( origin = c("A", "A", "B", "B", "B", "C"), destination = c("B", "C", "A", "B", "C", "A"), number = c(7,2,3,5,6,4) ) # 补全缺失行 full_data <- data %>% complete(origin, destination, fill = list(number = 1))
运行后输出的结果和你要求的理想格式完全一致,默认会按起点、终点的字典序自动排序。
方案2:基础R实现(无需额外安装包)
如果不想加载第三方包,可以用基础R的expand.grid生成全量OD组合后合并赋值:
# 提取所有唯一地点 locations <- unique(c(data$origin, data$destination)) # 生成全量OD组合 full_od <- expand.grid(origin = locations, destination = locations, stringsAsFactors = FALSE) # 合并原始数据并填充缺失值 full_data <- merge(full_od, data, by = c("origin", "destination"), all.x = TRUE) full_data$number[is.na(full_data$number)] <- 1 # 按起点排序匹配需求格式 full_data <- full_data[order(full_data$origin), ]
两种方案均兼容更大规模的OD矩阵补全场景,只要提取到全量的地点列表即可自动生成所有需要的组合行。
内容的提问来源于stack exchange,提问作者Jingjun
相关产品推荐
相关产品推荐

