R语言:合并sf地图对象与数据框后行数异常的原因及解决
问题原因与解决方法
异常原因
执行st_cast('POLYGON')后,部分多面多边形(MULTIPOLYGON)被拆分为多个单个多边形(POLYGON),导致nc$NAME出现重复值——同一个县名对应多行数据。
使用merge()按NAME合并时,会对所有同名行做交叉匹配(笛卡尔积)。比如某县名在nc和my_df中各出现2次,合并后会生成4行,最终总行数远超原数据。
解决方法
由于my_df是严格按照nc的行顺序生成的(行与行一一对应),无需用merge(),直接给nc新增列即可:
方法1:直接赋值添加列
# 直接用生成的unemployement_rate向量添加 nc$unemployement_rate <- unemployement_rate # 或者用my_df中的列 nc$unemployement_rate <- my_df$unemployement_rate
方法2:tidyverse风格添加列
library(dplyr) nc_merged <- nc %>% mutate(unemployement_rate = my_df$unemployement_rate)
备选:用唯一行ID合并(若必须用merge)
如果一定要使用merge(),可以给每行添加唯一行号作为匹配键:
# 给两个数据集添加唯一行ID nc$row_id <- seq(nrow(nc)) my_df$row_id <- seq(nrow(my_df)) # 按行ID合并,确保行一一对应 nc_merged <- merge(nc, my_df, by = "row_id", all.x = TRUE) # 可选:删除临时行ID列 nc_merged$row_id <- NULL
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

