Разделение sf-объекта персонажем без удаления его геометрии в R - PullRequest
1 голос
/ 22 мая 2019

Я пытаюсь 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?

1 Ответ

1 голос
/ 22 мая 2019

Ошибка из-за того, что nc[, splitField] не возвращает один вектор, он возвращает фрейм данных sf из двух столбцов с NAME и geometry.

Если вы настраиваете вызовto:

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

Индексация вернет только коэффициент, а затем split() будет работать как положено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...