首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中对netcdf数据进行PCA

如何在R中对netcdf数据进行PCA
EN

Stack Overflow用户
提问于 2014-10-16 14:52:25
回答 1查看 416关注 0票数 0

我在R中有以下netcdf文件:

代码语言:javascript
复制
"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,但不确定如何处理,或者数据是否需要转换成不同的格式才能这样做。

到目前为止,我已经完成了(下面的错误消息):

代码语言:javascript
复制
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

代码语言:javascript
复制
class(bio1)

1“矩阵”

代码语言:javascript
复制
oceanvars <- cbind(bio1,bio4, bio8, bio9)

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

colnames<-中的错误(*tmp*,value = c("bio1","bio4","bio8","bio9“):'dimnames‘2的长度不等于数组范围

代码语言:javascript
复制
pairs(oceanvars)

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

代码语言:javascript
复制
pca1 <- princomp(oceanvars, scores=TRUE, cor=TRUE)

Princomp.default中的错误(海洋,分数=真,cor =真):“princomp”只能用于多个单位而不是变量

任何建议都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-16 16:43:30

为什么您假设cbind对每个900列的4个矩阵产生一个包含4列的矩阵对象,允许将c("bio1“、"bio4”、"bio8“、"bio9")赋值为列名。

据我所知,对于Annual Mean TempTemp SeasonalityMean Temp of Wettest QuarterMean Temp of Driest Quarter这四个变量,总共有1944000个空间物体,你想要用主成分分析。

不幸的是,您没有提供一个可重复的示例,而是通过以下方式创建oceanvars

代码语言:javascript
复制
oceanvars <- cbind( c(bio1), c(bio4), c(bio8), c(bio9) )

应该已经成功了。原因是,c()将一个矩阵融化成一个简单的向量。

一个更一般、更清晰的过程将涉及到melt您的矩阵到3列data.frames,或者在这个大小下更好的data.tables,然后通过lonlat的组合将它们组合起来,然后将值列作为矩阵提供给princomp

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26407447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档