Chuyển đổi một số SpatialPointsDataFrames sang raster


9

Có 100 SpatialPointsDataFrames trong Vùng làm việc của tôi. Tôi đã tải chúng theo cách này:

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

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

Chúng được gọi như thế này:

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

Vân vân.

Làm cách nào tôi có thể chuyển đổi chúng thành các trình quét vòng lặp thông qua Workspace?

Tôi là người dùng R rất mới và hy vọng sẽ tìm thấy sự giúp đỡ. cảm ơn rất nhiều.


1
Chỉnh sửa bài đăng của bạn để xác định xem điểm của bạn có nằm trong lưới thông thường hay nếu bạn cần nội suy
Etienne Racine

Câu trả lời:


9

Nếu dữ liệu của bạn chứa dữ liệu xyz (trong đó z là giá trị raster) và các điểm của bạn nằm trên một lưới thông thường (không cần nội suy).

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

Nếu bạn cần nội suy, bạn có thể sử dụng thư viện 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)

Bây giờ, để thực hiện việc này một cách tuần tự, bạn chỉ cần gói nó trong một forvòng lặp (Tôi đã cố gắng ở gần nhất có thể từ thông tin bạn đã đưa ra trong câu hỏi của mình):

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
}

Tôi khuyên bạn không nên sử dụng travel@data(hoặc sử dụng @tất cả), vì điều này phụ thuộc vào tên nội bộ của a SpatialPointsDataFrame, có thể thay đổi. Tôi đề nghị sử dụng as.data.frame, không dựa vào các tên nội bộ này.
Paul Hiemstra

Điểm tốt. Tôi đã thay đổi nó. Tôi thích cách sử dụng khe cắm vì nó nhỏ gọn hơn, nhưng bạn đã đúng.
đua Etienne

5

Ngoài câu trả lời của @ Etiennebr, tôi sẽ sử dụng vòng lặp kiểu áp dụng (có nhiều R-ish hơn và sử dụng ít mã hơn cho cùng một thứ):

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")])
})

Hội Paul, cảm ơn bạn rất nhiều vì câu trả lời !! Phương pháp của bạn dễ dàng hơn nhiều so với phương pháp tôi đã tìm ra. Nếu bạn quan tâm đến methode của tôi, hãy cho tôi biết. Trân trọng, Livia
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.