R语言构建城市迁移单步转移矩阵 计算城市间迁移概率
R语言城市迁移转移矩阵生成方案
前置处理(根据需求二选一)
方案1:保留第二年无记录的样本(归类为迁出)
# 将City_year2的NA值替换为自定义类别,避免样本丢失 df$City_year2 <- as.character(df$City_year2) df$City_year2[is.na(df$City_year2)] <- "迁出观测范围" # 合并两个年份的所有城市作为统一因子水平,解决两边唯一值数量不一致的问题 all_cities <- unique(c(as.character(df$City_year1), df$City_year2)) df$City_year1 <- factor(df$City_year1, levels = all_cities) df$City_year2 <- factor(df$City_year2, levels = all_cities)
方案2:仅保留两年都有城市记录的样本
# 直接过滤存在NA的行 df_clean <- na.omit(df) # 合并两个年份的所有城市作为统一因子水平 all_cities <- unique(c(as.character(df_clean$City_year1), as.character(df_clean$City_year2))) df_clean$City_year1 <- factor(df_clean$City_year1, levels = all_cities) df_clean$City_year2 <- factor(df_clean$City_year2, levels = all_cities)
生成转移矩阵
# 第一步:生成迁移频数交叉表,行对应Year1城市,列对应Year2城市 # 如用方案2则把下方的df替换为df_clean mig_count <- table(City_year1 = df$City_year1, City_year2 = df$City_year2) # 第二步:按行归一化得到转移概率矩阵,每行求和为1,代表对应Year1城市的人口迁往各Year2城市的概率 mig_matrix <- prop.table(mig_count, margin = 1)
查询指定迁移概率
以查询第一年居住在阿姆斯特丹、第二年迁至鹿特丹的概率为例:
mig_matrix["Amsterdam", "Rotterdam"]
说明
- 该方案基于R原生函数实现,无需额外安装依赖包,20万行数据处理效率极高
- 统一因子水平的操作可以完全解决两个年份城市唯一值数量不匹配的问题,输出矩阵的行列顺序和所有城市一一对应
- 生成的标准转移矩阵可直接喂入各类Markov分析包的相关函数使用
内容的提问来源于stack exchange,提问作者Romy Schipper
相关产品推荐
相关产品推荐

