簡體   English   中英

比較矩陣的行並替換匹配的元素

[英]Comparing rows of matrix and replacing matching elements

我想比較兩個矩陣。 如果第一個矩陣中的行元素與第二個矩陣中的行元素匹配,那么我希望保留第二個矩陣中的行。 如果行不匹配,那么我希望這些行為空。 我很抱歉我最近有一個非常相似的問題,但我仍然無法解決這個問題。

輸入:

> mat1<-cbind(letters[3:8])
> mat1
     [,1]
[1,] "c" 
[2,] "d" 
[3,] "e" 
[4,] "f" 
[5,] "g" 
[6,] "h" 

> mat2<-cbind(letters[1:5],1:5)
> mat2
     [,1] [,2]
[1,] "a"  "1" 
[2,] "b"  "2" 
[3,] "c"  "3" 
[4,] "d"  "4" 
[5,] "e"  "5" 

預期 OUTPUT:

> mat3
     [,1] [,2]
[1,] "NA" "NA" 
[2,] "NA" "NA" 
[3,] "c"  "3" 
[4,] "d"  "4" 
[5,] "e"  "5" 

我沒有成功地嘗試過這個:

> mat3<-mat2[ifelse(mat2[,1] %in% mat1[,1],mat2,""),]

Error in mat2[ifelse(mat2[, 1] %in% mat1[, 1], mat2, ""), ] : 
  no 'dimnames' attribute for array

我已經掙扎了幾個小時,所以歡迎任何建議。

您走在正確的軌道上,但答案比您嘗試的要簡單一些。 mat2[, 1] %in% mat1[, 1]將匹配項作為邏輯向量返回,我們可以使用該向量作為索引將不匹配項設置為NA

mat1<-cbind(letters[3:8])
mat2<-cbind(letters[1:5],1:5)

match <- mat2[,1] %in% mat1 # gives a T/F vector of matches


mat3 <- mat2
mat3[!match,] <- NA

暫無
暫無

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

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