合并和替换重叠矩阵中的值

时间:2016-02-06 08:02:57

标签: r matrix

我有两个重叠的矩阵,有一些共享的列和行:

m.1 = matrix(c(NA,NA,1,NA,NA,NA,1,1,1,NA,1,1,1,1,1,NA,1,1,1,NA,NA,NA,1,NA,NA), ncol=5)
colnames(m.1)  <- c("-2","-1","0","1","2")
rownames(m.1)  <- c("-2","-1","0","1","2")

##    -2 -1 0  1  2
## -2 NA NA 1 NA NA
## -1 NA  1 1  1 NA
##  0  1  1 1  1  1
##  1 NA  1 1  1 NA
##  2 NA NA 1 NA NA

m.2 = matrix(c(NA,2,NA,2,2,2,NA,2,NA), ncol=3)
colnames(m.2)  <- c("-1","0","1")
rownames(m.2)  <- c("-1","0","1")

##    -1 0  1
## -1 NA 2 NA
##  0  2 2  2
##  1 NA 2 NA

现在我想将m.1m.2中每列的最大值传递给新的矩阵m.max,它应如下所示:

##    -2 -1 0  1  2
## -2 NA NA 1 NA NA
## -1 NA  1 2  1 NA
##  0  1  2 2  2  1
##  1 NA  1 2  1 NA
##  2 NA NA 1 NA NA

根据以前的主题,我使用merge()replace()match()进行了干预,但根本无法获得所需的结果,例如

m.max<- merge(m.1,m.2, by = "row.names", all=TRUE, sort = TRUE)

##   Row.names -2 -1.x 0.x 1.x  2 -1.y 0.y 1.y
## 1        -1 NA    1   1   1 NA   NA   2  NA
## 2        -2 NA   NA   1  NA NA   NA  NA  NA
## 3         0  1    1   1   1  1    2   2   2
## 4         1 NA    1   1   1 NA   NA   2  NA
## 5         2 NA   NA   1  NA NA   NA  NA  NA

请帮忙!我完全走错了路吗?此操作是否需要与矩阵不​​同的对象?例如,我还尝试将矩阵转换为栅格对象并进行单元统计,但由于m.1和m.2的尺寸不等,所以遇到了问题。

重要的是,答案也适用于更大的对象,或者我是否想要计算最大值,最小值或总和。

1 个答案:

答案 0 :(得分:2)

您可以使用pmax

#we create a new matrix as big as m.1 with the values of m.2 in it
mres<-array(NA,dim(m.1),dimnames(m.1))
mres[rownames(m.2),colnames(m.2)]<-m.2
#Then we use pmax
pmax(m.1,mres,na.rm=TRUE)
#   -2 -1 0  1  2
#-2 NA NA 1 NA NA
#-1 NA  1 2  1 NA
#0   1  2 2  2  1
#1  NA  1 2  1 NA
#2  NA NA 1 NA NA