首页 > 解决方案 > 用一个字符分割一个 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

标签: rsplitsf

解决方案


错误是因为nc[, splitField]没有返回单个向量,而是返回带有and的两列sf数据框。NAMEgeometry

如果您将呼叫调整为:

ncSplit <- split(nc, f = nc[[splitField]])

索引将只返回因子,然后split()按预期工作。


推荐阅读