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

在R语言中如何将坐标点与对应分类值匹配

解决SF随机点分类与坐标关联问题

需求回顾

在矩形(-6,-4)到(6,4)范围内生成250个随机点,位于指定方形区域内的点标记为蓝色,区域外标记为红色。最终需要将点坐标与分类值匹配:

  • 第三列(蓝色标记):蓝色点记+1,红色点记-1
  • 第四列(红色标记):蓝色点记-1,红色点记+1

修正后的完整代码

library(sf)
library(sfheaders)

# 生成边界矩形
border <- matrix(c(
  -6, -4,
  -6, 4,
  6, 4,
  6, -4,
  -6, -4
), ncol = 2, byrow = TRUE) %>% 
  sfheaders::sfc_polygon() 

# 生成目标方形区域并合并为单个多边形
squares1 <- matrix(c(
  -4, 0,
  -4, 3,
  -1, 3,
  -1, 0,
  -4, 0
), ncol = 2, byrow = TRUE) %>% 
  sfheaders::sfc_polygon() 

squares2 <- matrix(c(
  -2, -4,
  -2, -1,
  1, -1,
  1, -4,
  -2, -4
), ncol = 2, byrow = TRUE) %>% 
  sfheaders::sfc_polygon()

squares3 <- matrix(c(
  2, -2,
  2, 1,
  5, 1,
  5, -2,
  2, -2
), ncol = 2, byrow = TRUE) %>% 
  sfheaders::sfc_polygon()

# 合并多个方形为单个区域(更高效的判断方式)
target_area <- st_union(squares1, squares2, squares3)

# 生成随机点
rand_points <- st_sample(border, size = 250)  

# 判断每个点是否在目标区域内(蓝色点)
is_blue <- st_within(rand_points, target_area, sparse = FALSE)[,1]

# 提取坐标并转换为数据框
coord_df <- as.data.frame(st_coordinates(rand_points))
colnames(coord_df) <- c("X", "Y")  # 重命名坐标列

# 添加分类标记列
coord_df$blue_score <- ifelse(is_blue, 1, -1)
coord_df$red_score <- ifelse(is_blue, -1, 1)

# 查看结果(可选)
head(coord_df)

# 绘图验证(修正原代码变量名错误)
plot(border)
plot(rand_points[!is_blue], add = TRUE, col = "red")  # 红色点(区域外)
plot(rand_points[is_blue], add = TRUE, col = "blue") # 蓝色点(区域内)

关键步骤解释

  1. 合并目标区域:用st_union将多个方形合并为单个多边形,后续判断点是否在区域内时更高效。
  2. 批量标记分类:用st_within直接判断所有随机点是否在目标区域内,返回逻辑向量is_blue,避免分开存储红蓝点再合并的麻烦。
  3. 生成标记列:通过ifelse根据is_blue的值生成要求的第三、第四列,直接关联坐标与分类。
  4. 修正绘图错误:原代码中使用了未定义的negative_vals和positive_vals,改为用逻辑索引筛选红蓝点绘图。

结果说明

最终生成的coord_df数据框包含四列:

  • X/Y:点的坐标
  • blue_score:蓝色分类标记(蓝点+1,红点-1)
  • red_score:红色分类标记(蓝点-1,红点+1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:40:26