簡體   English   中英

在R中將一個矩陣擬合到另一個矩陣

[英]Fit one matrix into another in 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   

然后,我計算了新的緯度/經度對的對應值

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。

有人能幫我嗎?

我創建了一個較小的,完整的可復制示例。 這是較小的矩陣。

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

它根據索引數據按比例放大了矩陣。 這里的技巧只是用矩陣索引我們的矩陣,以便我們每次都可以獲取不同的行和列值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM