在R中将一个矩阵装入另一个矩阵

时间:2014-07-04 16:16:39

标签: r

我有一个矩阵A [72] [36],我想在一个更大的矩阵B [360] [180]中拟合A的值。

我构建了这个数据框,将A的col / row索引链接到新的'网格'。

> head(INDEX)
    LonNew LatNew LonINT LatINT 
1   -179.5  -89.5      1      1 
2   -178.5  -88.5      1      1  
3   -177.5  -87.5      1      1  
4   -176.5  -86.5      1      1  
5   -175.5  -85.5      1      1  
6   -174.5  -84.5      2      2  
7   -173.5  -83.5      2      2  
8   -172.5  -82.5      2      2   
9   -171.5  -81.5      2      2   
10  -170.5  -80.5      2      2   

然后我计算了新的Lat / Lon夫妇的相应值

NEWVar <- array(NA, dim = length(INDEX$LonNew))
for (j in 1:length(INDEX$LonINT) ){
    NEWVar[j] <- A[INDEX$LonINT[j],INDEX$LatINT[j]]
}

> head(NEWVar)

3 3 3 3 3 4 4 4 4 4

问题在于我不知道如何创建新的360x180矩阵,对于每一对(LonNew,LatNew),我都有相应的NEWVar。

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

我创建了一个更小,完整的可重复示例。这是较小的矩阵。

A<-matrix(1:4, nrow=2)
#      [,1] [,2]
# [1,]    1    3
# [2,]    2    4

让我们假设您希望使用此索引将其扩展到5x5。

INDEX<-data.frame(
   LonNew = rep(c(-2,-2,0,2,2), each=5),
   LatNew = rep(c(-2,-2,0,2,2), 5),
   LonInt = rep(c(1,1,1,2,2), each=5),
   LatInt = rep(c(1,1,2,1,2), 5)
)

将Lat和Lon的新值转换为数组索引的最简单方法是通过因子变量。所以我创造了

NNF <- factor(INDEX$LonNew)
TNF <- factor(INDEX$LatNew)

我用

创建新的B矩阵
B<-matrix(NA, nrow=nlevels(NNF), ncol=nlevels(TNF), 
    dimnames=list(levels(NNF), levels(TNF)))

然后我用

做作业
B[cbind(NNF, TNF)] <- A[cbind(INDEX$LonInt, INDEX$LatInt)]

然后返回

#    -2 0 2
# -2  1 3 3
# 0   1 3 3
# 2   2 4 4

根据索引数据放大了矩阵。这里的诀窍就是用矩阵索引矩阵,这样我们每次都可以获取不同的行和列值。