R:如何从SpatialPointsDataFrame编写XYZ文件



我有一个SpatialPointsDataFrame,它有一个属性(为了方便起见,我们称之为z)和lat/long坐标。

我想把它写到一个XYZ文件中(即一个有三列的ASCII文件)。

最初我尝试了

write.table(spdf, filename, row.names=FALSE)

但这会在每一行上首先写入z值,然后写入坐标。所以它是ZXY格式而不是XYZ格式。也许没什么大不了的,但对其他必须使用该文件的人来说很烦人。

目前,我正在使用一个感觉非常可怕的bodge来做这件事(如下所示),但我的问题是:有没有一种简单的方法可以将SPDF写成XYZ,并按正确的顺序排列列?这似乎应该很容易!

谢谢你的建议。

Bodge:

dfOutput <- data.frame(x = coordinates(spdf)[,1], y = coordinates(spdf)[,2])
dfOutput$z <- data.frame(spdf)[,1]
write.table(dfOutput, filename, row.names=FALSE)

为什么不只是

library(sp)
spdf <- SpatialPointsDataFrame(coords=matrix(rnorm(30), ncol = 2), 
                               data=data.frame(z = rnorm(15)))

write.csv(cbind(coordinates(spdf), spdf@data), file = "example.csv", 
          row.names = FALSE)

您可以使用rgdal包中的writeOGR写入.shp文件。或者,您可以fortify(从ggplot2)您的数据,并将其写入csv文件。

Noah关于类似coordinates但针对数据值的方法的评论的后续内容:raster包具有用于返回SpatialPointsDataFrame的值的getValues()方法。

library(raster)
spdf <- raster('raster.sdat')
write.table(
    cbind(coordinates(spdf), getValues(spdf)), 
    file = output_file, 
    col.names = c("X", "Y", "ZVALUE"),
    row.names = FALSE,
    quote = FALSE
    )

最新更新