如何在R中有效地从单个数据集中绘制多个半变异函数?

时间:2015-08-01 13:38:31

标签: r loops gstat automap

我有一个名为seoul1to7的数据框,包含2012年3月1日至3月7日的每小时PM10浓度数据。please,download.在此数据集中,时间为yyyymmddhr格式。例如,2012030101表示2012年3月1日,上午1点

数据看起来像:

      ID       time PM10      LAT     LON
1 111121 2012030101   42 37.56464 126.976
2 111121 2012030102   36 37.56464 126.976
3 111121 2012030103   46 37.56464 126.976
4 111121 2012030104   40 37.56464 126.976
.
.

我的最终目标是每小时绘制半变差函数。例如,2012年3月1日上午1点(2012030101)有107 PM10数据。我想绘制2012030101到2012030723的半变异函数(总共7 * 24半变异函数)。我在R中写了一些代码:

seoul1to7<-read.csv("seoul1to7.csv", row.names=1)
rownames(seoul1to7)<-NULL

seoul311<-subset(seoul1to7, time==2012030101)
seoul312<-subset(seoul1to7, time==2012030102)
.
.
.
seoul3723<-subset(seoul1to7,time==2012030724)

首先,我试图通过subset()函数创建所需的(7 * 24)数据帧 然后我想为每个数据帧绘制半变异函数。例如,我通过以下代码为seoul311(2012030101)绘制了半变异函数:

library(sp)
library(gstat)
library(rgdal)
seoul311<-read.csv("seoul311.csv",row.name=1)
seoul311<-na.omit(seoul311)

coordinates(seoul311)=~LON+LAT
proj4string(seoul311) =  "+proj=longlat +datum=WGS84" 
seoul311<-spTransform(seoul311, CRS("+proj=utm +north +zone=52 +datum=WGS84"))

#plot Omnidirectional Variogram
seoul311.var<-variogram(PM10~1,data=seoul311,cutoff=66000, width=6000)
seoul311.var
plot(seoul311.var, col="black", pch=16,cex=1.3,
     xlab="Distance",ylab="Semivariance",
     main="Omnidirectional Variogram for seoul 311")

#Model fit
model.311<- fit.variogram(seoul311.var,vgm(psill=250,model="Gau",range=40000,nugget=100),
                          fit.method = 2)
plot(seoul311.var,model=model.311, col="black", pch=16,cex=1.3,
     xlab="Distance",ylab="Semivariance",
     main="Omnidirectional Variogram for seoul 3112")


#Directional Variogram
seoul311.var1<-variogram(PM10~1,data=seoul311,width=6000,cutoff=66000,
                         alpha=seq(0,135,45),tol.hor=15)
seoul311.var1
plot(seoul311.var1,model=model.311, cex=1.1,pch=16,col=1,
     main="ANisotropic Variogram for PM10")    


#anisotropy corrected variograms
model.3112.anis<- fit.variogram(seoul311.var1,vgm(250,"Gau",40000,100,anis=c(45,0.80)),
                                fit.method = 2)

#Final isotropic variogram for kriging
plot(seoul311.var,model=model.3112.anis, col="black", pch=16,cex=1.3,
     xlab="Distance",ylab="Semivariance",
     main="Final Isotropic Variogram")

但我明白我的代码效率很低!我正在写这个代码(7 * 24)次subset(seoul1to7, time==2012030101)。然后再次(7 * 24)次绘制半变异函数的代码!我认为这是非常不恰当的方式。

那么,如何从我的数据集seoul1to7中非常有效地绘制这些(7 * 24)半变差函数(通过使用循环或任何其他函数)?如果您需要任何进一步的信息,请告诉我。

1 个答案:

答案 0 :(得分:1)

$preguntas= \Send\Pregunta::where('encuesta_id','=',1)->first();
$opciones= $preguntas->opciones(); // Now this will work

特别感谢Tim Appelhans教我。