r - 用一个字符分割一个 sf 对象而不删除它在 R 中的几何图形
问题描述
我正在尝试split
通过sf
字符向量指定的列来处理对象。通常对于data.frame
对象,我会使用[]
来指定要在其上使用split
函数的列。例如,如果我想按县名划分北卡罗来纳州:
library(sf)
# Set field to split on
splitField <- "NAME"
# Read-in data
nc <- st_read(system.file("shape/nc.shp", package = "sf"))
# Split by splitField
ncSplit <- split(nc, f = nc[, splitField])
然而,这会产生:
Error in sort.list(y) : 'x' must be atomic for 'sort.list'
Have you called 'sort' on a list?
我有一种感觉,这是由于 和 之间的差异class(nc[, splitField])
,因为在拆分时class(nc$NAME)
使用有效。$
但是使用$
将不允许我nc
按指定拆分splitField
,我必须将其硬编码。
我可以做的另一件事是删除它的几何图形(即st_geometry(nc) <- NULL
)并将其变成data.frame
,我不想这样做。
我需要一些帮助。如何sf
按指定的字符向量分割对象R
?
解决方案
错误是因为nc[, splitField]
没有返回单个向量,而是返回带有and的两列sf
数据框。NAME
geometry
如果您将呼叫调整为:
ncSplit <- split(nc, f = nc[[splitField]])
索引将只返回因子,然后split()
按预期工作。
推荐阅读
- unix - 用于在固定宽度文件中的特定位置提取具有空白值的行的 unix 命令
- python - 如何使用 Paramiko 记录每个 SSH 会话数据包?
- pine-script - 查找每个交易日的前四个连续的红色蜡烛
- javascript - 如何将消息发布到 iFrame 中?
- c# - 如何为两个几乎相同的应用程序删除 IoC 容器中的重复项?
- php - PHP在爆炸时检查字符串是否包含某些单词
- python - 有没有办法让 Canvas 每次在输入字段中输入数据时更新?
- python - 如何将维度添加到 numpy 数组并从另一个 numpy 数组复制维度
- java - 如何将 javaFX 14 应用程序导出到 IntelliJ 中的可执行文件?
- tensorflow - Tensorflow 访问带有 tensorflow 索引的张量