Как изменить класс с фрейма данных на пространственный многоугольник?

Я нашел то же самое здесьКак преобразовать фрейм данных в пространственные координаты, Но в моем случае я получил очень большие данные.

exchange    longitude   latitude
AB  103.3281386 1.594218196
AB  103.3285929 1.593990735
AB  103.3312494 1.591424235
AB  103.3283736 1.594063254
AB  103.3536164 1.622771588
AB  103.3613242 1.627138676
AB  103.3560151 1.619455334
AB  103.3297071 1.593398614
AB  103.3269466 1.596574285
AB  103.3279517 1.593614052
AB  103.3281356 1.593848271
AB  103.3567136 1.620498495
AB  103.3668021 1.63456952
AB  103.359686  1.624821271
AB  103.3308963 1.585290892
AB  103.3319569 1.59104387
AB  103.3307149 1.592006748
AB  103.3283657 1.593675616
AB  103.3314873 1.591186363
AB  103.3319648 1.590585241
AB  103.3321508 1.590422594
AB  103.3318503 1.588685843
AB  103.3324507 1.594547225
AB  103.3442528 1.60909707
AB  103.3292733 1.593461728
AB  103.3288584 1.594312512
AB  103.329041  1.594135083
AB  103.3348961 1.59761749
AB  103.3500524 1.614224612

Невозможно сделать так, как они:

mydf <- structure(list(longitude = c(128.6979, 153.0046, 104.3261, 124.9019, 
126.7328, 153.2439, 142.8673, 152.689), latitude = c(-7.4197, 
-4.7089, -6.7541, 4.7817, 2.1643, -5.65, 23.3882, -5.571)), .Names = c("longitude", 
"latitude"), class = "data.frame", row.names = c(NA, -8L))

Так кто-нибудь может помочь мне изменить класс с data.frame на пространственный полигон?

 ahmad fikri31 мая 2016 г., 09:04
Это потому, что мои данные такие же, как и в других постах. Но решение только для небольших данных. Если я получил, скажем, 100 данных. Как я могу использовать структуру (список (долгота = C (......)))
 lukeA31 мая 2016 г., 11:19
Что касается вашего редактирования: очевидно, ваши данные не такие, как в другом посте. Пожалуйста, привыкните, чтобы предоставить воспроизводимые примеры, как описано в ссылке RDC.

Ответы на вопрос(1)

Решение Вопроса

как и в других постах [...] Так что кто-нибудь может помочь мне изменить classfrom data.frame на пространственный многоугольник?

library(sp)
sp <- SpatialPolygons(list(Polygons(list(Polygon(mydf[, -1])), ID=1)))
class(sp)
# [1] "SpatialPolygons"
# attr(,"package")
# [1] "sp"

или, если хотитеexchange быть идентификатором полигона:

sp <- lapply(split(mydf[, -1], mydf[, 1]), Polygon)
sp <- SpatialPolygons(lapply(seq_along(sp), function(i) { 
  Polygons(list(sp[[i]]), ID = row.names(mydf[!duplicated(mydf[, 1]), ])[i] ) 
}))
# class(sp)
# [1] "SpatialPolygons"
# attr(,"package")
# [1] "sp"

Данные:

mydf <- read.table(header=T, text="
exchange   longitude   latitude
AB  103.3281386 1.594218196
AB  103.3285929 1.593990735
AB  103.3312494 1.591424235
AB  103.3283736 1.594063254
AB  103.3536164 1.622771588
AB  103.3613242 1.627138676
AB  103.3560151 1.619455334
AB  103.3297071 1.593398614
AB  103.3269466 1.596574285
AB  103.3279517 1.593614052
AB  103.3281356 1.593848271
AB  103.3567136 1.620498495
AB  103.3668021 1.63456952
AB  103.359686  1.624821271
AB  103.3308963 1.585290892
AB  103.3319569 1.59104387
AB  103.3307149 1.592006748
AB  103.3283657 1.593675616
AB  103.3314873 1.591186363
AB  103.3319648 1.590585241
AB  103.3321508 1.590422594
AB  103.3318503 1.588685843
AB  103.3324507 1.594547225
AB  103.3442528 1.60909707
AB  103.3292733 1.593461728
AB  103.3288584 1.594312512
AB  103.329041  1.594135083
AB  103.3348961 1.59761749
AB  103.3500524 1.614224612")
 ahmad fikri31 мая 2016 г., 11:11
хорошо, я отредактирую сообщение
 ahmad fikri31 мая 2016 г., 10:23
я не мог получить это. что такое mydf в вашем ответе? имя данных?
 lukeA31 мая 2016 г., 10:47
Это из поста, который вы связали.
 lukeA31 мая 2016 г., 11:35
Да я редактировал ответ
 ahmad fikri01 июн. 2016 г., 03:49
я не понял Это говорит, Ошибка в lapply (seq_along (lst), function (i) {: объект 'lst' не найден
 ahmad fikri01 июн. 2016 г., 10:59
это тип пространственного полигона? если я типаclass(sp) так должно бытьSpatialPolygon верно? но это возвращениеlist
 ahmad fikri31 мая 2016 г., 11:22
Вы можете отредактировать свой ответ? Я не получил его
 lukeA01 июн. 2016 г., 11:02
Вы должны обернуть этоSpatialPolygons снова - см. мое редактирование
 ahmad fikri31 мая 2016 г., 11:05
моя проблема в том, что у меня большие данные, скажем, у меня 100 баллов. Невозможно сделать, как они, mydf <- структура (список (longitude = c (128.6979, 153.0046, 104.3261, 124.9019, 126.7328, 153.2439, 142.8673, 152.689) , широта = c (-7.4197, -4.7089, -6.7541, 4.7817, 2.1643, -5.65, 23.3882, -5.571)), .Names = c ("долгота", "широта"), класс = "data.frame", row.names = c (NA, -8L))
 lukeA31 мая 2016 г., 11:18
использованиеPolygon(mydf[, -1]) вместоPolygon(mydf) - первый столбец не является частью координат.
 ahmad fikri02 июн. 2016 г., 03:09
хорошо, тогда. Большое спасибо за ваш ответ и ваше время
 lukeA01 июн. 2016 г., 09:20
К сожалению,lst должен бытьsp Вот. Пожалуйста, попробуйте еще раз
 ahmad fikri01 июн. 2016 г., 11:16
да, вы правильно поняли. Если возможно, вы можете добавить описание, потому что я новичок в r. многого не понял. ценю ваше время
 lukeA31 мая 2016 г., 11:09
Да, ты сказал это. Если я кормлю выше сmydfЯ получаю объект пространственных полигонов. На вопрос ответили как можно лучше, поскольку вы не следовали совету @RDC
 lukeA01 июн. 2016 г., 13:13
Это немного сложно. Сначала мы разбиваем все столбцы фрейма данных, кроме первого, на первый. Затем мы делаем каждое разбиение (которое является длинным / широковым фреймом данных) объектом Polygon. Таким образом, первая ошибка получает список объектов Polygon. Следующее окно получает список объектов Polygons. И это то, что мы можем преобразовать в объект SpatialPolygons. Посмотрите файлы справки, например,?Polygons.
 ahmad fikri31 мая 2016 г., 10:24
он говорит, Ошибка в .local (obj, ...): не может получить координаты из нечисловой матрицы

Ваш ответ на вопрос