簡體   English   中英

用另一個矩陣中的值替換一個矩陣中的值

[英]Replacing values in one matrix with values from another

我正在嘗試與矩陣進行比較。 當值不相等時,我想使用mat2的值,只要它大於0即可; 如果它是零,那么我想要來自mat1的值。 如當前的代碼所示,它似乎不斷返回mat1的值。

這是我的嘗試:

mat.data1 <- c(1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1)
mat1 <- matrix(data = mat.data1, nrow = 5, ncol = 5, byrow = TRUE)


mat.data2 <- c(0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 1, 2, 2, 0, 0, 0, 1, 2, 2, 0, 2, 1, 0, 1)
mat2 <- matrix(data = mat.data2, nrow = 5, ncol = 5, byrow = TRUE)

mat3 = if(mat1 == mat2){mat1} else {if(mat2>0){mat2} else {mat1}}

預期的輸出應該是

1   0   1   1   1
0   1   2   1   1
1   1   2   2   0
1   1   1   2   2
1   1   1   0   1

我們可以使用coalesce

library(dplyr)
out <- coalesce(replace(mat2, !mat2, NA), replace(mat1, !mat1, NA))    
replace(out, is.na(out), 0)

或就像@Axeman提到的

coalesce(out, 0)

這是一種可行的方法。

mat.data1 <- c(1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1)
mat1 <- matrix(data = mat.data1, nrow = 5, ncol = 5, byrow = TRUE)


mat.data2 <- c(0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 1, 2, 2, 0, 0, 0, 1, 2, 2, 0, 2, 1, 0, 1)
mat2 <- matrix(data = mat.data2, nrow = 5, ncol = 5, byrow = TRUE)


mat3 <- mat1
to_change <- which(mat2 != mat1 & mat2 > 0)
mat3[to_change] <- mat2[to_change]

這具體使用which基本要求在位置mat2不在等於mat1並在mat2大於零。 然后,您可以只做一個子集並將這些值放在mat3

然后,此輸出為:

> mat3
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    0    1    1    1
[2,]    0    1    2    1    1
[3,]    1    1    2    2    0
[4,]    1    1    1    2    2
[5,]    1    2    1    0    1

暫無
暫無

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

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