导入多个文件R.

时间:2013-10-24 19:48:12

标签: r csv raster

我希望你能帮助我。我一直在尝试将多个栅格数据集导入R,为每个导入的栅格数据重新编码缺失值,将它们链接到zipcodes,然后将每个栅格数据导出为具有不同名称的csv文件。 我试图使用循环但到目前为止我只有错误。这是我得到的(不要笑):

导入所有24个栅格数据集

file_names=as.list(dir(pattern="home.*"))
listy<-lapply(file_names,raster, band=1)
names(listy) <- paste0("hour", seq_along(0:23))

所以现在我将所有栅格数据集放在一个列表中(listy),我只需要在每个栅格数据集上运行以下命令:

listy

的元素1的示例
listy$hour1_r<-listy$hour1
listy$hour1_r[listy$hour1_r==9999]<-NA
y <- extract(listy$hour1_r, zipcoords)
hour1_zipcode <- cbind(zipid,y)
write.table(hour1_zipcode,file="home\\hour1.csv",sep=",",row.names=F)

如何使用循环执行此操作? 我非常感谢您提出的任何建议!

谢谢!!! 米

2 个答案:

答案 0 :(得分:0)

使用命令创建一个函数:

f <- function(listy,filename) {
  listy$hour1_r<-listy$hour1
  listy$hour1_r[listy$hour1_r==9999]<-NA
  y <- extract(listy$hour1_r, zipcoords)
  hour1_zipcode <- cbind(zipid,y)
  write.table(hour1_zipcode,file=filename,sep=",",row.names=F)
}

对所有元素运行命令:

mapply(f, listy, filename= paste0("home\\hour",seq_along(listy),".csv"))

请注意,您实际上并不希望mapply返回任何内容,因此您可以将其包装为不可见:

invisible(mapply(f, listy, filename= paste0("home\\hour",seq_along(listy),".csv")))

您也可以在for循环中执行此操作:

filenames = paste0("home\\hour",seq_along(list),".csv")
for (i in seq_along(listy)) f(listy[[i]],filenames[[i]])

答案 1 :(得分:-1)

你能不能在for循环中做到这一点?

for(i in 1:length(listy)) { 

listy[[i]] <- listy[[i]]
etc
}     

或与lapply

lapply(listy, function(x) { 
  x[[i]] <- x[[i]]
  etc
  } 
)