我在R中有以下netcdf文件:
"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个变量执行PCA,但不确定如何处理,或者数据是否需要转换成不同的格式才能这样做。
到目前为止,我已经完成了(下面的错误消息):
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中的错误(海洋,分数=真,cor =真):“princomp”只能用于多个单位而不是变量
任何建议都将不胜感激!
发布于 2014-10-16 16:43:30
为什么您假设cbind对每个900列的4个矩阵产生一个包含4列的矩阵对象,允许将c("bio1“、"bio4”、"bio8“、"bio9")赋值为列名。
据我所知,对于Annual Mean Temp,Temp Seasonality,Mean Temp of Wettest Quarter和Mean Temp of Driest Quarter这四个变量,总共有1944000个空间物体,你想要用主成分分析。
不幸的是,您没有提供一个可重复的示例,而是通过以下方式创建oceanvars
oceanvars <- cbind( c(bio1), c(bio4), c(bio8), c(bio9) )应该已经成功了。原因是,c()将一个矩阵融化成一个简单的向量。
一个更一般、更清晰的过程将涉及到melt您的矩阵到3列data.frames,或者在这个大小下更好的data.tables,然后通过lon和lat的组合将它们组合起来,然后将值列作为矩阵提供给princomp。
https://stackoverflow.com/questions/26407447
复制相似问题