我正在try 使用经度和纬度创建一个点文件,然后使用st_Join和st_in将它们与人口普查区域进行匹配.但这些积分最终都落在了堪萨斯州.如果您使用的是带有API的tidycopcount库,则有可重复使用的代码:

虚拟数据点的代码主要在科罗拉多州,区域边界在科罗拉多州和堪萨斯州:

library(tidycensus)
library(sf)
library(dplyr)
library(tidyverse)

# Set seed for reproducibility
set.seed(42)

# Generate dummy data for points in New York
points <- data.frame(
  longitude = runif(300, min = -109, max = -102),  # Approximate longitude boundaries of Colorado
  latitude = runif(300, min = 36.993076, max = 41)  # Approximate latitude boundaries of Colorado
)

# Print the first few rows of the dummy data
points <- st_as_sf(points, coords = c("longitude", "latitude"), crs = "ESRI:102003")

tract2010 <- get_decennial(geography = "tract", variables = "P001001", year = 2010,
                          state = as.list(c("Colorado", "Kansas")), geometry = TRUE)

tract2010$state_code <- substr(tract2010$GEOID, 1, 2)
table(tract2010$state_code)

# make same CRS
tract2010 <- st_transform(tract2010, st_crs(points))`

将其绘制在传单中,以确保这些点位于正确的位置:

# test where it is
library(leaflet)
leaflet() %>%
  addTiles() %>%
  addMarkers(data = points)

enter image description here

运行连接并判断匹配.从表格中,所有的分数都在州代码20(堪萨斯州)

#spatial join
points <- st_join(points, tract2010, join = st_within)
table(points$state_code, useNA = "always")

推荐答案

您正在将点数据的坐标系定义为ESRI:102003,但点数据的经度和纬度为WGS84或NAD83.为了清楚起见,我已经复制了您的整个代码,并注释了您需要的额外步骤.以下假设您的原始点数据为NAD83(EPSG:4269),如果不正确,请添加正确的EPSG代码:

library(tidycensus)
library(sf)
library(dplyr)
library(tidyverse)
library(ggplot2)

# Set seed for reproducibility
set.seed(42)

# Generate dummy data for points 
points <- data.frame(
  longitude = runif(300, min = -109, max = -102),  # Approximate longitude boundaries of Colorado
  latitude = runif(300, min = 36.993076, max = 41)  # Approximate latitude boundaries of Colorado
)

# NAD83 points to ESRI:102003
points <- st_as_sf(points, coords = c("longitude", "latitude")) %>%
  st_set_crs(4269) %>% # This is the bit you missed
  st_transform("ESRI:102003")

# Get census tracts
tract2010 <- get_decennial(geography = "tract", variables = "P001001", year = 2010,
                           state = as.list(c("Colorado", "Kansas")), geometry = TRUE)

# Create new state_code variable
tract2010$state_code <- substr(tract2010$GEOID, 1, 2)

# Transform
tract2010 <- st_transform(tract2010, st_crs(points))

# Spatial join
points <- st_join(points, tract2010_1, join = st_within)

ggplot() +
  geom_sf(data = tract2010) +
  geom_sf(data = points,
          aes(colour = state_code))

result

R相关问答推荐

用单个表达匹配多个替代模式

按块将载体转换为矩阵-reshape

R Markdown中的交叉引用表

如何在区分不同条件的同时可视化跨时间的连续变量?

如何在ggplot图中找到第二轴的比例

如果某些列全部为NA,则更改列

将饼图插入条形图

将. xlsx内容显示为HTML表

基于数据集属性将科分配给物种

为什么这个表格格罗布不打印?

将工作目录子文件夹中的文件批量重命名为顺序

将列表中的字符串粘贴到R中for循环内的dplyr筛选器中

如何为混合模型输出绘制不同的线型?

以任意顺序提取具有多个可能匹配项的组匹配项

随机 Select 的非NA列的行均数

基于R中的辅助向量中的值有条件地连接向量中的字符串

如何在R中创建这些列?

删除r中每个因素级别的最后2行

如何将两个用不同的运算符替换*的矩阵相乘

如何修改Rust中的R字符串并将其赋给新的R变量,并使用extendr保留原始R字符串