我有一个SpatialPointsDataFrame,它有一个属性(为方便起见,我们称之为z)以及纬度/经度坐标。
我想将其写入XYZ文件(即具有三列的ASCII文件)。
最初我试过
write.table(spdf, filename, row.names=FALSE)
但是这首先在每一行写了z值,然后是坐标。所以它是ZXY格式而不是XYZ格式。也许并不是什么大不了的事,但对于那些不得不使用该文件的人来说很烦人。
目前我正在使用感觉真是太可怕的蠢事(如下所示),但我的问题是:是否有一种好的,直接的方式将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)
答案 0 :(得分:3)
为什么不
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)
答案 1 :(得分:2)
您可以使用writeOGR
包中的rgdal
写入.shp文件。或者,您可以fortify
(来自ggplot2
)您的数据并将其写为csv文件。
答案 2 :(得分:1)
紧跟着Noah对类似coordinates
的方法的评论,但仅涉及数据值:raster
包具有getValues()
方法,用于返回SpatialPointsDataFrame的值。
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
)