แปลง SpatialPointsDataFrames หลายรายการเป็นแรสเตอร์


9

มี 100 SpatialPointsDataFrames ในพื้นที่ทำงานของฉัน ฉันโหลดมันด้วยวิธีนี้:

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
แก้ไขโพสต์ของคุณเพื่อระบุว่าคะแนนของคุณอยู่ในตารางปกติหรือหากคุณต้องการการแก้ไข
Etienne Racine

คำตอบ:


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(หรือใช้@เลย) เนื่องจากต้องอาศัยชื่อภายในของ a SpatialPointsDataFrameซึ่งอาจเปลี่ยนแปลงได้ ฉันขอแนะนำให้ใช้as.data.frameซึ่งไม่ต้องพึ่งพาชื่อภายในเหล่านี้
Paul Hiemstra

จุดดี. ฉันเปลี่ยนมันแล้ว ฉันชอบการใช้สล็อตเพราะกะทัดรัดกว่า แต่คุณพูดถูก
Etienne Racine

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

ฮอยพอลขอบคุณมากสำหรับคำตอบ !! วิธีการของคุณนั้นง่ายกว่าวิธีที่ฉันคิด หากคุณมีความสนใจใน methode ของฉันเพียงแค่แจ้งให้เราทราบ ขอแสดงความนับถือ Livia
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.