【发布时间】:2014-05-21 09:38:19
【问题描述】:
我有超过 800 个 .asc 文件(ESRI ascii 网格),每个文件都有一个由 6 行组成的标题,然后是由空格分隔的栅格数据。这里以一个小文件为例。我使用 read.asciigrid(sp 包)阅读它。
new("SpatialGridDataFrame" , 数据 = 结构(list(mydata.asc = c(4, 4, 4, 4, 3, 4, 4, 4, 1, 1, 1, 1, 1, 4, 4, 4, 4, 3, 4 , 4, 4, 1, 1, 1, 1, 1, 4, 4, 4, 4, 3, 4, 4, 4, 1, 1, 1, 1, 1, 4, 4, 4, 4, 3, 4, 4, 4, 6, 1, 1, 1, 1, 4, 4, 4, 4, 3, 4, 4, 4, 6, 1, 1, 1, 1, 4, 4, 4, 4, 3, 4, 4, 4, 6, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6)), .Names = "mydata.asc", row.names = c(NA, -143L), class= "data.frame") , grid = new("GridTopology" , cellcenter.offset = c(394984.42630274, 2671265.4912109) , 像元大小 = c(25, 25) , cells.dim = c(13L, 11L) ) , bbox = 结构 (c(394971.92630274, 2671252.9912109, 395296.92630274, 2671527.9912109), .Dim = c(2L, 2L), .Dimnames = list(NULL, c("min", "max"))) , proj4string = new("CRS" , projargs = NA_character_ ) )
这是使用文本编辑器查看文件时的样子。
这是我想做的步骤
1) 读入文件 2)删除前6行(标题) 3) 将文件另存为具有相同文件名但位于不同位置的 .asc 文件
当然,我想对 800 个文件执行此操作,但如果我能弄清楚如何对一个文件执行此操作,我应该能够编写一个函数来遍历所有文件。
感谢您的帮助。
-al
更新: 感谢@Luca Braglia,这是对我有用的最终代码。
设置工作目录
setwd("c:/temp/hdr/ascii")
newdir <- "c:/temp/hdr/ascii_no_hdr/"
files <- dir(pattern="*.asc")
for (my.file in files){
i <- read.table(my.file,skip=6,sep="")
write.table(i,file=paste(newdir,my.file,sep=""),sep="",row.names=FALSE,col.names=FALSE)
}
我不想要 col 和 row 的名称。一段非常简单有效的代码。
【问题讨论】:
-
read.asciigrid是否采用skip参数?如果是这样,在 read 语句中添加skip=6将避免读取前六行。 -
我没有在参数中看到跳过参数。
-
呃,考虑用 raster() 读取它们,生成合理的格式并将这些可怕的文本文件交给熔炉。您真的需要更多简化的文件吗?目标是什么?