[英]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.