按字符拆分 sf 对象而不删除它在 R 中的几何形状

Splitting an sf object by a character without removing it's geometry in 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,我不想这样做。

我需要一些帮助。如何通过 R 中指定的字符向量拆分 sf 对象?

错误是因为 nc[, splitField] 不是 return 单个向量,它是 return 两列 sf 数据框 NAMEgeometry.

如果您将调用调整为:

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

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