R语言tmap绘图报错:as.numeric(...)数据兼容问题求助
问题描述
研究纽约州门罗县种族数据时,使用R语言获取2020年人口普查tract层级数据,计算种族占比后筛选Black群体数据,调用tmap绘图时出现以下错误和警告:
错误:! Assigned data
as.numeric(...)must be compatible with existing data。具体为现有数据211行,赋值数据210行,仅大小为1的向量可循环
警告:The shape monroe_black contains empty units
使用的代码如下:
monroe_race <- get_decennial( geography = "tract", state = "NY", county = "Monroe", variables = c( Hispanic = "P2_002N", White = "P2_005N", Black = "P2_006N", Native = "P2_007N", Asian = "P2_008N" ), summary_var = "P2_001N", year = 2020, geometry = TRUE ) %>% mutate(percent = 100 * (value / summary_value)) monroe_black <- filter(monroe_race, variable == "Black") tm_shape(shp = monroe_black) + tm_polygons()
解决步骤
问题根源
报错和警告的核心原因是monroe_black数据中存在空几何单元(即部分tract没有有效的多边形边界),导致tmap处理时数据行与几何行数量不匹配,触发赋值错误。
修正代码
在筛选Black群体后,添加过滤空几何的操作,确保所有行都有有效几何和对应数据:
library(tidycensus) library(tmap) library(dplyr) library(sf) monroe_race <- get_decennial( geography = "tract", state = "NY", county = "Monroe", variables = c( Hispanic = "P2_002N", White = "P2_005N", Black = "P2_006N", Native = "P2_007N", Asian = "P2_008N" ), summary_var = "P2_001N", year = 2020, geometry = TRUE ) %>% mutate(percent = 100 * (value / summary_value)) # 筛选Black群体并移除空几何单元 monroe_black <- monroe_race %>% filter(variable == "Black") %>% filter(!st_is_empty(geometry)) # 关键:剔除空几何行 # 绘图时明确指定填充变量,避免默认匹配问题 tm_shape(shp = monroe_black) + tm_polygons(col = "percent")
额外说明
st_is_empty(geometry)函数识别所有几何为空的行,!符号用于反向筛选,保留有有效几何的行。- 绘图时指定
col = "percent",明确告诉tmap使用计算好的种族占比作为填充颜色变量,避免默认字段匹配混乱。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

