You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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")

额外说明

  1. st_is_empty(geometry)函数识别所有几何为空的行,!符号用于反向筛选,保留有有效几何的行。
  2. 绘图时指定col = "percent",明确告诉tmap使用计算好的种族占比作为填充颜色变量,避免默认字段匹配混乱。

内容的提问来源于stack exchange,提问作者Jack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 23:20:28