Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将R中的一个矩阵拟合到另一个矩阵中_R - Fatal编程技术网

将R中的一个矩阵拟合到另一个矩阵中

将R中的一个矩阵拟合到另一个矩阵中,r,R,我有一个矩阵a[72][36],我想在更大的矩阵B[360][180]中拟合a的值 我构建了这个数据框架,将A的列/行索引链接到新的“网格” > 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

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

我构建了这个数据框架,将A的列/行索引链接到新的“网格”

> 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

NEWVar我创建了一个更小、完全可复制的示例。这是较小的矩阵

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

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

欢迎使用堆栈溢出。请阅读并找出如何提出一个好的问题,从而产生好的、有用的答案。你能发布你的代码,以及预期的行为/结果和实际结果吗?我仍然对这个索引应该如何工作感到困惑。或者,当您使用NA创建NEWVar时,您是如何将值输入其中的。那三个和四个是从哪里来的?也许你不需要做一个完整的72x36矩阵,你可以创建一个小规模的问题。也许A是2x2,B是5x5,这样我们才能更好地了解你们在做什么?@Philip,第二个链接不起作用。@RichardScriven,请看编辑后的问题,许多感谢我不能使它适用于非二次矩阵,而且我不明白如何使用它来解决我的问题。我不确定二次型会有什么不同。您的数据与我的样本有何不同?索引表应该正在做所有的工作。好的,对不起,也许我不明白什么。你是如何创建LonInt和LatInt的?如果我这样做的话,INDEXI只是创建了一个示例索引映射。我想你会用你创造的。它应该在前两列中给出B的x,y值,在第二列中给出A的x,y索引值。您可以随意进行映射。但对于上面的示例,它更像是
LonNew=rep(c(-2,-1,0,1,2),each=3),+LatNew=rep(c(-1,0,1),each=5)
,因此它们最终的长度相同。但是,我的方法不需要您更改INDEX data.frame。之后你要做什么,从因子转换开始。
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)
)
NNF <- factor(INDEX$LonNew)
TNF <- factor(INDEX$LatNew)
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