在R中将地理数据更改为网格形式

时间:2013-10-20 01:19:49

标签: r data-structures plyr

目前我正在美国清理一些No2排放数据,数据格式如下:

lat long no2

xxx xxx  xxx

xxx xxx  xxx

xxx xxx  xxx

但我最终想要的是一个数据矩阵,其中纬度为行名,经度为列名,例如

     long1 long2 long3 ...
lat1 xxxx  xxxx  xxxx
lat2 xxxx  xxxx  xxxx
lat3 xxxx  xxxx  xxxx
...

另外,由于我不一定有上面矩阵中每个单元格的数据,我希望缺少数据的地方标记为“0”。

我以前做的是:

one <- read.table(files[1], header = TRUE, sep = ",")
one <- one[,1:3]
row_name <- seq(25.05,49.95, by = 0.1)
col_name <- seq(-124.95, -65.05, by = 0.1)
a <- matrix(0, length(row_name), length(col_name))
data_matrix <- data.frame(a)
row.names(data_matrix) <- row_name
names(data_matrix) <- col_name

for (i in 1: dim(one)[1]){
    lat <- as.character(one[i,]$lat)
    long <- as.character(one[i,]$long)
    data_matrix[lat,long] <- one[i,]$no2 
}    

这种方法显然是缓慢而低效的,因为基本上我所做的就是遍历整个矩阵并逐个单元填充空白。

如果有人能帮我解决这个问题,我真的很感激!

1 个答案:

答案 0 :(得分:1)

这只是一个猜测(虽然这是一个非常好的猜测),直到你发布一些数据,但直到发生这种情况,考虑一下:

 grid_mat <- xtabs( no2 ~ lat +lon, data=one)