按字符拆分 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
数据框 NAME
和 geometry
.
如果您将调用调整为:
ncSplit <- split(nc, f = nc[[splitField]])
索引将 return 只是因子,然后 split()
将按预期工作。
我正在尝试通过字符向量指定的列 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
数据框 NAME
和 geometry
.
如果您将调用调整为:
ncSplit <- split(nc, f = nc[[splitField]])
索引将 return 只是因子,然后 split()
将按预期工作。