태그 보관물: r

r

R의 포인트 위치에서 래스터에서 값을 추출하는 방법은 무엇입니까? 83

내 질문은 점의 위치에서 래스터에서 값을 추출하는 것입니다. 함수 추출을 사용하면 이것은 매우 쉽고, 함수는 포인트의 모든 변수 값을 가진 데이터 프레임을 제공합니다. 해당 데이터 프레임에 각 점의 좌표를 갖고 싶습니다. 어떻게 그렇게 할 수 있습니까? 래스터에서 값을 추출 할 때 위치 포인트의 열도 추가한다고 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 추출 위치 테이블의 다른 열 일 수 있음).

너무 감사합니다.



답변

그 가정 presenciasvariables같은 돌출부를 공유, 이것은 쉬운 작업이 될 것이다. 데이터 프레임을 SpatialPointsDataFrame 객체 read.table()로 변환하기 위해 명령문 뒤에 이러한 코드 줄을 추가하는 것이 좋습니다 presencias(예와 다른 경우 x 및 y 좌표를 포함하는 열의 이름을 수정하십시오).

coordinates(presencias) <- c("x", "y")

재현 가능한 예를 제공하기 위해 대답의 범위를 조금 더 열려고합니다. 우선, 독일에서 어느 정도 중요한 위치 에이 ESRI shapefile 을 다운로드하여 압축을 푸십시오 . 이것들은 나중에 포인트 데이터로 사용됩니다. 또한 패키지가 필요합니다 dismo, rgdal그리고 raster이 짧은 예를 들어, 그래서이 라이브러리 (및 모든 종속성) 로컬 하드 드라이브에 설치되어 있는지 확인하십시오.

필요한 패키지를로드하는 것으로 시작하겠습니다.

library(dismo)
library(rgdal)
library(raster)

다음으로 샘플 RasterLayer를 생성해야합니다. 우리의 경우, 우리는 독일의 물리적지도를 얻기 위해 패키지에서 gmap()기능을 사용할 것 dismo입니다.

germany.mrc <- gmap("Germany")

이제 readOGRR의 rgdal패키지 를 통해 포인트 셰이프 파일을 가져올 수 있습니다 . 데이터 소스 이름 (dsn = …)을 조정하십시오. 특정 경우에는 전체 투 사물이 더 이상 사용되지 않습니다. 그러나 점 데이터를 독일 RasterLayer로 오버레이하려면이 예에서 수행해야합니다.

# Import SpatialPointsDataFrame
germany.places <- readOGR(dsn = "/path/to/shapefile", layer = "places")
# Define shapefile's current CRS
projection(germany.places) <- CRS("+proj=lonlat +ellps=WGS84")
# Reproject to RasterLayer's CRS
germany.places.mrc <- spTransform(germany.places, CRS(projection(germany.mrc)))

우리는 포인트 데이터의 거대한 크기를 줄이기 위해 독일에서 10 곳의 무작위 샘플을 추출 할 것입니다. 이것은 우리의 목적에 충분해야합니다.

set.seed(35)
germany.places.mrc.sample <- germany.places.mrc[sample(nrow(germany.places.mrc), 10), ]

이제 준비물이 완성되었으므로 무작위로 샘플링 한 10 개의 점이 속하는 특정 픽셀의 값을 추출하기 시작했습니다.

data <- data.frame(coordinates(germany.places.mrc.sample),
                   germany.places.mrc.sample$name,
                   extract(germany.mrc, germany.places.mrc.sample))
names(data) <- c("x", "y", "name", "value")

포인트 좌표를 추출 된 픽셀 값과 병합하려면 SpatialPointsDataFrame의 좌표를 포함하는 데이터 프레임을 설정하면됩니다. 그게 다야!

data
           x       y          name value
1  1073490.3 6513446 Veitsteinbach   208
2  1269100.8 6156690   Assenhausen   231
3  1336757.5 6246284    Frauenwahl   195
4   828579.9 6634122      Altenhof   189
5  1571418.1 6662558         Wohla   151
6  1192299.4 6864087     Flechtorf   170
7   976270.0 6362050    Hilsenhain   208
8  1117416.4 6092146      Nestbaum   175
9  1274192.0 6344490 Wappeltshofen   236
10  878488.2 6839843        Leeden   208

답변

확실히 당신은 할 수 있습니다 :

variables_presencia$x <- presencias['x']

variables_presencia$y <- presencias['y']

(좌표 데이터가 ‘x’와 ‘y’라는 두 열에 있다고 가정)


답변