使用 R 操作 shapefile 属性表

2023-12-29

我已经发布了这个关于GIS堆栈交换的问题 https://gis.stackexchange.com/questions/64174/how-to-add-a-field-to-a-shapefile-using-r,但流量并不多。

我是一名 GIS 用户,多年来一直使用 R 进行统计,我很高兴看到许多新的 GIS 功能被发布(栅格、shapefile、rgdal 等)。

我在 R 中完成了大量数据库和表操作,因此能够在 shapefile 中添加和删除属性是一个强大的潜力。

我希望我只是错过了那里的内容,但我似乎找不到从 shapefile 属性表中添加或删除属性的好方法。

Overflow 中的任何人都可以回复我的 GIS 帖子吗?或者可以建议我如何将列表属性表放入数据帧并返回以替换当前属性表?

编辑进度

自我原来的帖子以来取得了一些进展:

这是为了弄清楚如何获取我的属性表 appart (.dbf)、添加内容,现在我正尝试将其放回一起以替换原始 dbf。

>libary(raster); library(rgdal); library(shapefiles)
>shp<-shapefile(Shape)  # D.C. area airport polygons
>summary(shp)           #Shapefile properties

Object of class SpatialPointsDataFrame
Coordinates:
                min       max
coords.x1  281314.2  337904.7
coords.x2 4288867.0 4313507.0
Is projected: TRUE 
proj4string :
[+proj=utm +zone=18 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0]
Number of points: 4
Data attributes:
    ObjectID        LOCID               NAME              FIELD              STATE            STATE_FIPS           ACAIS              TOT_ENP            TYPE          
 Min.   :134.0   Length:4           Length:4           Length:4           Length:4           Length:4           Length:4           Min.   :    271   Length:4          
 1st Qu.:242.8   Class :character   Class :character   Class :character   Class :character   Class :character   Class :character   1st Qu.:   3876   Class :character  
 Median :339.0   Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character   Median :3409113   Mode  :character  
 Mean   :310.0                                                                                                                     Mean   :3717251                     
 3rd Qu.:406.2                                                                                                                     3rd Qu.:7122488                     
 Max.   :428.0

 >shp.AT<-read.dbf(gsub(".shp", ".dbf", Shape), header=TRUE)    #Read in the attribute table from the .dbf
 > shp.AT       # First object in the dbf looks like an attribute table!
$dbf
  ObjectID LOCID                            NAME               FIELD    STATE STATE_FIPS ACAIS TOT_ENP          TYPE
1      134   ADW                     Andrews AFB                <NA> Maryland         24     Y    5078      Military
2      279   DCA             Washington National                <NA> Virginia         51     Y 6813148          <NA>
3      399   HEF               Manassas Regional Harry P Davis Field Virginia         51     Y     271      Regional
4      428   IAD Washington Dulles International                <NA> Virginia         51     Y 8050506 International

$header
$header$file.version
[1] 3

$header$file.year
[1] 113

$header$file.month
[1] 4

$header$file.day
[1] 12

$header$num.records
[1] 4

$header$header.length
[1] 321

$header$record.length
[1] 148

$header$fields
        NAME TYPE LENGTH DECIMAL
1   ObjectID    N     10       0
2      LOCID    C      5       0
3       NAME    C     45       0
4      FIELD    C     30       0
5      STATE    C     24       0
6 STATE_FIPS    C      2       0
7      ACAIS    C      1       0
8    TOT_ENP    N     11       0
9       TYPE    C     20       0

>shp.tab<-as.data.frame(shp.AT[1]) # Grab the first object of the .dbf as a data.frame

> shp.tab       # First list object
  dbf.ObjectID dbf.LOCID                        dbf.NAME           dbf.FIELD dbf.STATE dbf.STATE_FIPS dbf.ACAIS dbf.TOT_ENP      dbf.TYPE
1          134       ADW                     Andrews AFB                <NA>  Maryland             24         Y        5078      Military
2          279       DCA             Washington National                <NA>  Virginia             51         Y     6813148          <NA>
3          399       HEF               Manassas Regional Harry P Davis Field  Virginia             51         Y         271      Regional
4          428       IAD Washington Dulles International                <NA>  Virginia             51         Y     8050506 International 

> shp.tab$NewAT<-1:nrow(shp.tab) # Add my new attribute

> shp.tab # Added my new attribute, now to get this back into my shapefile
  dbf.ObjectID dbf.LOCID                        dbf.NAME           dbf.FIELD dbf.STATE dbf.STATE_FIPS dbf.ACAIS dbf.TOT_ENP      dbf.TYPE NewAT
1          134       ADW                     Andrews AFB                <NA>  Maryland             24         Y        5078      Military     1
2          279       DCA             Washington National                <NA>  Virginia             51         Y     6813148          <NA>     2
3          399       HEF               Manassas Regional Harry P Davis Field  Virginia             51         Y         271      Regional     3
4          428       IAD Washington Dulles International                <NA>  Virginia             51         Y     8050506 International     4

>write.dbf(shp.tab, gsub(".shp", ".dbf", Shape)) # Knew this wouldn't work, but demonstrate attempt to write this object as .dbf.
ERROR:
invalid subscript type 'list'

> shp.AT[1]<-shp.tab # Try replacing the old Object[1] with my new table containing the new attribute.

> shp.AT # The table portion fo the shp.AT is gone. No attributes.
$dbf
[1] 134 279 399 428

$header
$header$file.version
[1] 3

$header$file.year
[1] 113

$header$file.month
[1] 4

$header$file.day
[1] 12

$header$num.records
[1] 4

>write.dbf(shp.AT, gsub(".shp", ".dbf", Shape)) # If I go ahead and overwrite anyway...

我的属性消失了,取而代之的是包含单个字段“数据帧”的属性表。 我递归脚本以再次读取属性表。

> shp.tab
  dataframe
1       134
2       279
3       399
4       428

所以,我想我已经很接近了。谁能帮我把它放回 shapefile 属性表中? 或者说,有没有更好的方法呢?

Thanks


我不确定我完全理解你想要做什么。看起来您只是想在属性表中添加一个新列?如果这是正确的,那么就像对待任何数据帧一样对待它。

library(rgdal)
dsn <- system.file("vectors", package = "rgdal")
shp<-readOGR(dsn = dsn, layer = 'cities')
shp$NewAT<-1:nrow(shp)

这与我系统上的 shapefile 完美配合。我通常依靠 rgdal 使用 readOGR() 函数读取 shapefile。我相当确定您调用的 shapefile() 函数也调用了 rgdal。

编辑以添加可重现的数据集。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 R 操作 shapefile 属性表 的相关文章

  • 循环更改多个数据帧

    例如 我有这三个数据集 就我而言 它们更多并且有很多变量 data frame1 lt data frame a c 1 5 3 3 2 b c 3 6 1 5 5 c c 4 4 1 9 2 data frame2 lt data fra
  • 估算缺失数据,同时强制相关系数保持不变

    考虑以下 excel 数据集 m r 2 0 3 3 0 8 4 0 1 3 2 1 5 2 2 3 1 9 2 5 1 2 3 0 2 0 2 6 我的目标是使用以下条件填充缺失值 将上述两列之间的成对相关性表示为 R 大约 0 68 将
  • 使填充的值成为ggplot2中的实际填充

    有没有办法让填充的值 标签 成为填充本身 例如 在堆积条形图中 我有 require ggplot2 big votes movies movies movies votes gt 100000 p ggplot big votes mov
  • 无法使用include_graphics在Rmarkdown中插入png(错误:文件不是PNG格式)

    这个错误很奇怪 当我编织文档时 出现以下错误 Quitting from lines 42 43 sigminer doc Rmd Error in png readPNG path native TRUE info TRUE file i
  • 使用 Visual Studio 构建 R 包 (C API)

    我正在尝试使用 Visual Studio 构建一个简单的 R 包 这是我的代码 include
  • 通过非 sf 列内连接两个 sf 对象

    我尝试使用内连接或左连接连接两个 sf 数据帧 这些数据框内部都有几何列 我不断收到错误 check join x y 中的错误 y 应该是一个数据框 对于空间连接 请使用 st joinFALSE 下面的可重现示例 df1 lt data
  • R+Hadoop:如何从HDFS读取CSV文件并执行mapreduce?

    在以下示例中 small ints to dfs 1 1000 mapreduce input small ints map function k v cbind v v 2 MapReduce函数的数据输入是一个名为small ints的
  • 列表列中的设置操作

    我正在尝试做集合运算在存储在列表列中的向量之间 例如this https stackoverflow com questions 38712196 text file to dataframe with a list column DT l
  • 两组点之间的距离[重复]

    这个问题在这里已经有答案了 因此 在查看了 stackoverflow 上提出的各种问题后 我仍然无法理解 R 中的 dist 函数 甚至无法理解一般的距离矩阵 所以我有两个带有 xy 坐标的数据框 df1 lt data frame x
  • 如何找到每个分类变量的连续变量的平均值

    我想在 y 轴上绘制连续的 BMI 在 x 轴上绘制家庭收入的分类变量 并且我希望该图绘制每个类别的平均 BMI 然而 我不知道如何找到家庭收入每个因素的平均体重指数 Dataset nh 5994 total IDs with Obser
  • R 中的优化函数可以接受目标、梯度和粗麻布吗?

    我有一个想要优化的复杂目标函数 优化问题需要相当长的时间来优化 幸运的是 我确实有可用的函数的梯度和粗麻布 R 中是否有一个优化包可以接受所有这三个输入 optim 类不接受 Hessian 矩阵 我已经扫描了用于优化的 CRAN 任务页面
  • dplyr :过滤一系列行(在一列中)

    虚拟数据框 id family lt c 1 1 2 2 3 3 people lt c male female male female male children dataset lt data frame id family peopl
  • ggmap 错误:GeomRasterAnn 是使用不兼容版本的 ggproto 构建的

    我正在使用 ggmap 并收到以下错误 Error GeomRasterAnn was built with an incompatible version of ggproto Please reinstall the package t
  • 使用 gbuffer 在 R 中缓冲(地理)空间点

    我正在尝试缓冲数据集中半径为 100 公里的点 我正在使用该功能gBuffer从包装中rgeos 这是我到目前为止所拥有的 head sampledf postalcode lat lon city province 1 A0A0A0 47
  • 在 R 中使用 gamlss::lms 选择百分位数曲线

    我正在使用 gamlss 包中的示例代码来绘制百分位数曲线 library gamlss data abdom lms y x data abdom n cyc 30 它正在绘制自己的一组百分位数曲线 如何选择只绘制第 10 50 和 90
  • 完全缺失列的 VaR 计算

    我需要计算股票收益的滚动 VaR 从这篇文章 使用rollapply函数使用R进行VaR计算 https stackoverflow com questions 25045612 using rollapply function for v
  • 从 Cox PH 模型预测概率

    我正在尝试使用 cox 模型来预测时间 称为停止 3 后失败的概率 bladder1 lt bladder bladder enum lt 5 coxmodel coxph Surv stop event rx size number cl
  • 在R中绘制3x3方形网格

    我得到了一个数字列表 n 9 想将它们画在一个 3 3 的正方形网格中 每个网格填充相应的数字 我如何在 R 中执行此操作而不安装额外的软件包 例如情节 非常感谢 这里有一个ggplot解决方案比我预期的要难一点 Setup the dat
  • R 的 dplyr 切片中的奇怪行为

    打电话时slice df i 在 R 的 dplyr 包中 如果我要求的行索引不存在 nrows lt i 它似乎返回除组中的第一行之外的所有行 就像我调用的那样slice df 1 例如 library dplyr c1 lt c a b
  • 如何更改 Quarto pptx 中的字体格式

    我正在 R 中使用 Quarto 创建 pptx 要更改我尝试更改的默认字体格式mainfont范围 但是当我渲染它时 最终的 pptx 文件具有默认字体 Calibri 这是我的文件 YAML 将 Quarto 文件渲染为 pptx 时如

随机推荐

  • 检测声音在THREE.PositionalAudio 中结束?

    我想检测声音何时结束 但我发现所有示例都不起作用 Create sound var sound1 new THREE PositionalAudio listener sound1 load sounds Example ogg sound
  • 如何在 OpenLDAP 2.4 中使用 olcAccess 向用户添加权限

    我的公司运行着一台 OpenLdap Server 2 4 我需要允许人们在我们的 Web 应用程序之一中更改他们的图片 该功能已经存在 LDAP 中的人们没有任何权利编写自己的属性 特别是这里 jpeg照片 需要属性 我在文档中找到了这个
  • python multiprocessing:AttributeError:无法腌制本地对象

    我在类中有一个方法来返回参数可能会更改的函数 Interface函数接受两个参数 f及其args 我想使用mp pool来加速它 但是 它返回一个错误 from multiprocessing import Pool from multip
  • 在 Bootstrap 中对表行进行排序 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有人可以向我展示一个我必须用来对 Bootstrap 中表的列进行排序的代码示例吗 例如 如果我想按价格或名称排序 这些例子是mini
  • 电话号码的最佳正则表达式是什么? [复制]

    这个问题在这里已经有答案了 可能的重复 用于电话号码验证的综合正则表达式 https stackoverflow com questions 123559 a comprehensive regex for phone number val
  • 仅在单击弹出模式按钮 ok jquery js 后打开新选项卡

    我有密码和用户名的形式 我希望当我单击 登录 按钮 使用正确的凭据 时 它会显示一个弹出窗口 其中包含单击时的按钮 将我带到网站的主页 您可以在这里找到代码https jsfiddle net hcu0r6dj 1 https jsfidd
  • 如何在Python SQL查询中使用变量?

    我正在使用一些复制粘贴的代码通过 Python Flask 在 MySQL DB 上执行 SQL 查询 我不熟悉它 它告诉我尝试输入变量的方式不是正确的语法 我的代码运行一个查询来查看电子邮件是否已存在 问题代码 def check if
  • 消除 tbody 标签之间的间隙

    有没有办法消除slight两者之间的差距tbody标签当它们都像这样内联显示时 http jsfiddle net kttss http jsfiddle net kttss 正如您在小提琴中看到的那样 两个桌子之间有一个微小的间隙 我知道
  • 确定 NSFetchedResultsController 是否为空

    确定 NSFetchedResultsController 是否为空 不包含任何条目 的好方法是什么 我意识到人们可以使用fetchedObjects这会将所有结果加载到内存中吗 fetchedObjects 是一个数组 是检查 0 条记录
  • android中org.json.JSONObject无法转换为JSONArray

    当我在本地主机中尝试时 它可以找到 这是我的本地主机提供的 JSON 是的 这个网址有错误http api androidhive info contacts http api androidhive info contacts id 1
  • 使用已知的用户 ID、相册 ID 和相册名称在 Facebook 应用 Android 中打开 Facebook 相册

    我努力了 Facebook 专辑 fb album s owner s 这些都不起作用 我只想打开 Facebook 应用程序并打开相册 None
  • 如何在 macOS 上的 Xcode 动态库中解开从 C++ 导出的符号

    我一直在尝试用 C 开发一个可以在应用程序中运行时加载的动态库 我终于成功了 但它有点难看 我有一个函数 它将指向 C 类的指针作为参数 如下所示 bool registerGrindPlugin Grind PluginManager m
  • 右连接等于左连接吗? [复制]

    这个问题在这里已经有答案了 一段时间以来 我只知道如何使用 INNER JOIN 完全不知道 LEFT RIGHT OUTER JOIN 的作用 虽然 正如我刚刚读到的那样 我看不出右派的目的是什么 在我看来 它与反向 LEFT JOIN
  • 创建与部分用户代理匹配的 WURFL 补丁

    我正在使用 WURFL 来识别用户是否使用移动设备 某些用户代理字符串被错误地识别为移动设备 从而导致内容类型设置不正确 这是一个现实生活中的用户代理的示例 其行为如下 Mozilla 5 0 GTmetrix http gtmetrix
  • 使用openpyxl无法读取excel文件

    我有一个 Excel 文件列表 最后一行类似 它包含有关客户的私人信息 他的名字 姓氏 电话 每个excel文件对应一个客户 我需要制作一个 Excel 文件 其中包含每个客户的所有数据 我决定自动执行此操作 所以查看了openpyxl图书
  • 程序和调试器在没有出现问题的情况下退出

    我正在开发一个 WPF 应用程序 调试时 逻辑达到某个点 然后应用程序无故退出 VS 调试器没有捕获任何内容 唯一的问题指示是输出窗口中的以下内容 程序 6228 SomeApp vshost exe 托管 v4 0 30319 已退出 代
  • 如何从扩展名为 .pyw 的 Python 脚本打印到标准输出?

    我有一个带有 wxpython GUI 和一些命令行参数的 python 程序 我使用 py2exe 生成一个 Windows 可执行文件 我不想在后台有一个命令行窗口 因此 py2exe 使其成为一个没有此窗口的 pythonw 可执行文
  • javascript中如何检查字符串是否以数字开头

    我试图确定用户是否输入了电子邮件 ID 或电话号码 因此我想检查字符串是否以 1或数字开头 以确定它是否是电话号码 如果不是 我得出的结论是这是一封电子邮件 或者我可以检查它是否以字母开头以确定 我该如何检查这个 如果这就是解决方案 我对正
  • 如何在管理器中延迟加载模型以停止循环导入?

    在 Django 中 您可以为模型创建管理器 我通过添加一个名为的新文件来做到这一点managers py在我的模型中objects MyManager 为了停止循环进口 我这样做self model 但是 如果我需要在我的经理中引用不同的
  • 使用 R 操作 shapefile 属性表

    我已经发布了这个关于GIS堆栈交换的问题 https gis stackexchange com questions 64174 how to add a field to a shapefile using r 但流量并不多 我是一名 G