2014-10-16 25 views
0

我在R中的下列netCDF文件:如何做的NetCDF数据的PCA中的R

"file oceandata.nc has 2 dimensions:" 
"lon Size: 2160" 
"lat Size: 900" 
"------------------------" 
"file oceandata.nc has 14 variables:" 
"float bio1[lon,lat] Longname:bio1: Annual Mean Temp Missval:1e+30" 
"float bio4[lon,lat] Longname:bio4: Temp Seasonality (standard deviation * 100) Missval:1e+30" 
"float bio8[lon,lat] Longname:bio8: Mean Temp of Wettest Quarter Missval:1e+30" 
"float bio9[lon,lat] Longname:bio9: Mean Temp of Driest Quarter Missval:1e+30" 
"float bio10[lon,lat] Longname:bio10: Mean Temp of Warmest Quarter Missval:1e+30" 
"float bio11[lon,lat] Longname:bio11: Mean Temp of Coldest Quarter Missval:1e+30" 
"float bio12[lon,lat] Longname:bio12: Annual Precipitation Missval:1e+30" 
"float bio13[lon,lat] Longname:bio13: Precipitation of Wettest Month Missval:1e+30" 
"float bio14[lon,lat] Longname:bio14: Precipitation of Driest Month Missval:1e+30" 
"float bio15[lon,lat] Longname:bio15: Precipitation Seasonality (coefficient of variation) Missval:1e+30" 
"float bio16[lon,lat] Longname:bio16: Precipitation of Wettest Quarter Missval:1e+30" 
"float bio17[lon,lat] Longname:bio17: Precipitation of Driest Quarter Missval:1e+30" 
"float bio18[lon,lat] Longname:bio18: Precipitation of Warmest Quarter Missval:1e+30" 
"float bio19[lon,lat] Longname:bio19: Precipitation of Coldest Quarter Missval:1e+30" 

我想对文件中的14个变量进行主成分分析,但我不能确定如何去做这件事,或者如果数据需要转换为不同的格式,然后我才能做到这一点。

到目前为止我已经做(下面的错误消息):

ocean <- open.ncdf("oceandata.nc") 

bio1 <- get.var.ncdf(nc=ncdf, varid="bio1") 

bio4 <- get.var.ncdf(nc=ncdf, varid="bio4") 

bio8 <- get.var.ncdf(nc=ncdf, varid="bio8") 

bio9 <- get.var.ncdf(nc=ncdf, varid="bio9") 

dim(bio1) 

[1] 2160 900

class(bio1) 

[1] “矩阵”

oceanvars <- cbind(bio1,bio4, bio8, bio9) 

colnames(oceanvars) <- c("bio1", "bio4", "bio8", "bio9") 

错误colnames<-*tmp*,value = c(“bio1”,“bio4”,“bio8”,“bio9”:'dimnames'[2]的长度不等于数组扩展吨

pairs(oceanvars) 

错误plot.new():图边距太大

pca1 <- princomp(oceanvars, scores=TRUE, cor=TRUE) 

错误princomp.default(oceanvars,分数= TRUE,COR = TRUE): 'princomp' 只能是使用更多的单位比变量

任何建议将不胜感激!

回答

1

为什么假设每个矩阵有900列,导致矩阵对象有4列,允许将c(“bio1”,“bio4”,“bio8”,“bio9”)分配为列名。

所以据我了解,你有四个变量Annual Mean TempTemp Seasonality,要在其中由PCA分析总1944000个空间对象Mean Temp of Wettest QuarterMean Temp of Driest Quarter

可惜你不提供重复的例子,但通过

oceanvars <- cbind(c(bio1), c(bio4), c(bio8), c(bio9)) 

创建oceanvars应该已经做的伎俩。原因是,c()将矩阵化为简单向量。

一个更通用和清洁过程会涉及到melt你的矩阵,以3列data.frames或在这个尺寸甚至更好data.tables然后merge他们通过lonlat再结合刚刚提供的价值列的矩阵princomp

+0

这工作正常,感谢您的帮助! – user3493038 2014-10-17 08:15:46