我是一位编程新手,试图比较两个矩阵。如果mat1中第一列的元素与mat2中第一列的任何元素匹配,那么我希望mat1中的该匹配元素被n2的邻居(同一行不同的列)替换为mat2中的匹配项。
输入:
mat1<-matrix(letters[1:5])
mat2<-cbind(letters[4:8],1:5)
> mat1
[,1]
[1,] "a"
[2,] "b"
[3,] "c"
[4,] "d"
[5,] "e"
> mat2
[,1] [,2]
[1,] "d" "1"
[2,] "e" "2"
[3,] "f" "3"
[4,] "g" "4"
[5,] "h" "5"
希望输出:
> mat3
[,1]
[1,] "a"
[2,] "b"
[3,] "c"
[4,] "1"
[5,] "2"
我尝试了以下但没有成功:
> for(x in mat1){mat3<-ifelse(x==mat2,mat2[which(x==mat2),2],mat1)}
> mat3
[,1] [,2]
[1,] "a" "a"
[2,] "2" "b"
[3,] "c" "c"
[4,] "d" "d"
[5,] "e" "e"
任何建议将不胜感激。花了整整一整天都没有工作。对我来说,元素在矩阵还是数据帧中都没有关系。
谢谢。
最佳答案
ifelse
是vectorized
,因此,我们可以在整列中使用它。通过检查'mat1'的第一列值是否是test
'mat2'的第一列,在ifelse
中创建%in%
逻辑条件,然后使用match
获取相应值的索引,并使用该索引提取第二列的值,否则返回“mat1”的第一列
mat3 <- matrix(ifelse(mat1[,1] %in% mat2[,1],
mat2[,2][match(mat1[,1], mat2[,1])], mat1[,1]))
mat3
# [,1]
#[1,] "a"
#[2,] "b"
#[3,] "c"
#[4,] "1"
#[5,] "2"
关于r - 用另一个矩阵中的值替换一个矩阵中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61416641/