我有一个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
)