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

如何使用terra包为Shapefile添加匹配关联的列?

按匹配字段将数据框列添加到Terra矢量数据中

基础数据准备

首先加载Terra包并读取示例Shapefile:

library(terra)
#> terra 1.6.7
v <- system.file("ex/lux.shp", package="terra") |> vect()

常规添加字段的方式如下:

v[["ID_new_v1"]] <- 1:nrow(v)
v$ID_new_v2 <- 1:nrow(v)

需求说明

现有数据框dat,需要将其中的my列,按照矢量数据v的NAME_2字段与dat的ec字段的对应关系,匹配添加到v中。dat的数据结构如下:

dat=structure(list(ec = c("Diekirch", "Redange"), med.x = c(7, 8), 
                   co.x = c(113L, 590L), my = c(3, 5), co.y = c(113L, 590L), 
                   per = c(3, 9)), row.names = 1:2, class = "data.frame")

解决方案

方法一:使用merge函数(推荐)

Terra的merge函数可以直接将矢量数据和数据框按指定字段匹配合并,保留矢量数据的所有要素:

# 只选取dat中需要匹配的ec和my列,按对应字段合并
v_merged <- merge(v, dat[, c("ec", "my")], by.x = "NAME_2", by.y = "ec", all.x = TRUE)

参数all.x=TRUE表示保留v中的所有要素,没有匹配到的要素对应的my值会设为NA,符合常规需求。

方法二:使用match手动赋值

通过match函数找到对应索引,再给矢量数据添加新字段:

# 获取v中每个NAME_2在dat$ec中的位置索引
match_pos <- match(v$NAME_2, dat$ec)
# 给v添加my字段并赋值
v$my <- dat$my[match_pos]

没有匹配到的位置match会返回NA,因此对应的my值也会是NA。

结果验证

可以通过以下代码查看添加后的字段:

# 查看前几行的NAME_2和my字段
head(v[, c("NAME_2", "my")])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 20:16:12