Мой вопрос касается извлечения значений из растров в месте расположения точек. С функцией извлечения это очень легко, и функция дает мне информационный фрейм со значениями всех переменных в точках. Я хочу иметь в этом фрейме координаты каждой точки. Как я могу это сделать? Можно ли сказать R, что при извлечении значений из растра также добавляются столбцы точки местоположения.
Это моя процедура:
presencias=read.table("c:/SDM_R/presencias/P_lentiscus_pres.csv",header=TRUE,sep=";")
lista_variables <-list.files(path="Variables_modelizacion/solo_ascii",pattern='*.asc',full.names=TRUE)
variables <- stack(lista_variables)
variables_presencia<-extract(variables, presencias)
результаты примерно такие:
> bio1 bio12 bio18 bio2 bio4
> 90 875 165 95 4886
> 115 1085 158 83 4075
> 135 1153 153 67 3402
> 85 1026 137 99 5203
> 96 667 128 108 5823
> 98 531 109 113 6305
> 132 450 63 123 6598
> 132 569 104 106 5963
> 95 814 196 98 5571
> 146 474 39 114 6603
Но я хочу еще два столбца с данными координат (но это могут быть и другие столбцы из моей таблицы местоположений, извлекающих csv).
Большое спасибо.
presencias
?cbind(coordinates(presencias), variables_presencia)
? Затем вы можете конвертировать в SPDF с помощьюcoordinates(result) <- ~ X + Y
и снова использовать множество методов, разработанных для пространственных объектов.Ответы:
Предполагая это
presencias
иvariables
разделяя ту же самую проекцию, это должно быть легкой задачей. Я рекомендую вам добавить эти строки кода после вашегоread.table()
оператора, чтобы преобразоватьpresencias
dataframe в объект SpatialPointsDataFrame (просто уточните имена столбцов, содержащих координаты x и y, если они отличаются от моего примера).Чтобы привести воспроизводимый пример, я попытаюсь раскрыть сферу моего ответа немного подробнее. Прежде всего, скачайте и распакуйте этот шейп- файл ESRI в более или менее важных местах в Германии. Они будут служить точечными данными позже. Вам также понадобятся пакеты
dismo
,rgdal
иraster
для этого короткого примера убедитесь, что эти библиотеки (и все их зависимости) установлены на вашем локальном жестком диске.Начнем с загрузки необходимых пакетов.
Далее вы должны сгенерировать образец RasterLayer. В нашем случае мы будем использовать
gmap()
функцию изdismo
пакета, чтобы получить физическую карту Германии.Теперь вы можете импортировать свой шейп-файл точек
readOGR
изrgdal
пакета R. Обязательно настройте имя источника данных (dsn = ...). Весь проект проекции устарел в вашем конкретном случае. Однако это необходимо сделать в нашем примере, чтобы успешно наложить наши точечные данные на растровый слой Германии.Чтобы уменьшить огромный размер наших точечных данных, мы нарисуем случайную выборку из десяти мест в Германии. Этого должно хватить для наших целей.
Теперь, когда подготовка завершена, мы можем просто начать извлекать значения тех конкретных пикселей, в которых находятся наши десять случайно выбранных точек.
Чтобы объединить координаты точки с извлеченными значениями пикселей, нам просто нужно установить фрейм данных, содержащий координаты нашего SpatialPointsDataFrame. Это оно!
источник
Конечно, вы можете просто сделать:
variables_presencia$x <- presencias['x']
variables_presencia$y <- presencias['y']
(предполагается, что ваши координаты находятся в двух столбцах, называемых «х» и «у»)
источник