여러 SpatialPointsDataFrames를 래스터로 변환


9

내 작업 공간에 100 개의 SpatialPointsDataFrame이 있습니다. 나는이 방법으로 그들을로드 :

filenames <- list.files(path="",
                        pattern="XYhectareTravelTimes_ez+.*shp")

for(i in filenames){
              filepath <- file.path("/",i)
              assign(i, readShapePoints(filepath))

그들은 이렇게 불립니다 :

XYhectareTravelTimes_ez10.*shp 
XYhectareTravelTimes_ez11.*shp 
XYhectareTravelTimes_ez12.*shp 

기타

작업 공간을 반복하는 래스터로 어떻게 변환 할 수 있습니까?

나는 매우 새로운 R 사용자이며 도움을 받기를 희망합니다. 고마워


1
편집 게시물은 포인트가 일반 그리드에있는 경우 지정하거나하는 보간이 필요한 경우
에티엔 느 라신

답변:


9

데이터에 xyz 데이터가 포함되어 있고 (여기서 z는 래스터 값임) 점이 일반 그리드에 있습니다 (보간 필요 없음).

library("raster")
r <- rasterFromXYZ(as.data.frame(travel)[, c("x", "y", "z")])

보간이 필요한 경우 akima 라이브러리를 사용할 수 있습니다.

library("raster")
library("akima")

steps <- 100
isu <- with(travel@data, interp(x, y, z, 
    xo=seq(min(x), max(x), length = steps),
    yo=seq(min(y), max(y), length = steps)
))

r <- raster(isu)

이제 이것을 순차적으로 수행하려면 for루프 로 묶어야합니다 (질문에 제공 한 정보와 최대한 가깝게 유지하려고 노력했습니다).

library("raster")

filenames <- list.files(path="", pattern="XYhectareTravelTimes_ez+.*shp")

# create a container for all the rasters
raster_cat <- list()

for (i in filenames) { 
  travel <- readShapePoints(i)
  r <- rasterFromXYZ(as.data.frame(travel)[, c("x", "y", "z")])
  raster_cat[[i]] <- r
}

내가 사용에 대해 조언을 것 travel@data(또는 사용 @이가의 내부 이름에 의존로, 전혀) SpatialPointsDataFrame변경 될 수 있습니다. as.data.frame이 내부 이름에 의존하지 않는를 사용 하는 것이 좋습니다 .
Paul Hiemstra

좋은 지적. 나는 그것을 바꿨다. 더 컴팩트하기 때문에 슬롯 사용법이 마음에 들지만 맞습니다.
에티엔 느 라신

5

@Etiennebr의 답변 외에도, 적용 스타일 루프를 사용하려고합니다 (더 R-ish이며 동일한 일에 더 적은 코드를 사용합니다).

library("raster")

filenames <- list.files(path="", pattern="XYhectareTravelTimes_ez+.*shp")

raster_cat = lapply(filenames, function(x) {
  travel <- as.data.frame(readShapePoints(x))
  r <- rasterFromXYZ(travel[, c("x", "y", "z")])
})

호이 폴, 답변 주셔서 대단히 감사합니다 !! 귀하의 방법은 내가 알아 낸 방법보다 훨씬 쉽습니다. 내 방법에 관심이 있으시면 알려주세요. 안부 인사, Livia
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.