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

如何用R的dplyr包按站点和坐标范围匹配数据集并提取jph值?

用R的dplyr包实现站点内坐标范围匹配提取数据

需求说明

我有两个数据集,均包含site、x、y列:

  • 数据集A额外包含jph列
  • 数据集B额外包含xplus1、xminus1、yplus1、yminus1和尺寸分类列(示例中为fish_length)

需要针对每个站点,当数据集A的x、y坐标处于数据集B的xminus1至xplus1、yminus1至yplus1范围内时,提取数据集A的jph值,同时保留数据集B的site列和尺寸分类列。

示例数据集

datasetA <- data.frame(
  site = c('Site1', 'Site2', 'Site3'),
  x = c(1, 5, 9),
  y = c(2, 6, 10),
  jph = c(100, 200, 300)
)

datasetB <- data.frame(
  site = c('Site1', 'Site2', 'Site3'),
  xplus1 = c(2, 6, 10),
  xminus1 = c(0, 4, 8),
  yplus1 = c(3, 7, 11),
  yminus1 = c(1, 5, 9),
  fish_length = c(15, 25, 35)
)

解决方案代码

加载dplyr包后,通过三步实现需求:

  1. 按site关联两个数据集,确保仅匹配同一站点的数据
  2. 筛选出A的坐标落在B对应范围的行
  3. 保留所需列
library(dplyr)

# 执行匹配提取
result <- datasetB %>%
  inner_join(datasetA, by = "site") %>%
  filter(x >= xminus1 & x <= xplus1,
         y >= yminus1 & y <= yplus1) %>%
  select(site, fish_length, jph)

# 查看结果
print(result)

代码说明

  • inner_join(..., by = "site"):按站点合并两个数据集,确保跨站点的数据不会被错误匹配
  • filter(...):设置坐标范围筛选条件,仅保留符合范围要求的行
  • select(...):提取最终需要的列,剔除中间过程产生的冗余列

运行上述代码后,输出结果如下:

site fish_length jph
1 Site1          15 100
2 Site2          25 200
3 Site3          35 300

如果需要保留数据集B的所有行(即使没有匹配到数据集A的有效坐标),只需将inner_join替换为left_join,未匹配到的jph值会显示为NA。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 06:42:43