r - 用另一个矩阵中的值替换一个矩阵中的值

标签 r matrix

我是一位编程新手,试图比较两个矩阵。如果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" 

任何建议将不胜感激。花了整整一整天都没有工作。对我来说,元素在矩阵还是数据帧中都没有关系。

谢谢。

最佳答案

ifelsevectorized,因此,我们可以在整列中使用它。通过检查'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/

相关文章:

javascript - 以指数格式绘制轴

mysql - R和RMySQL,如何获取连接的数据库名称?

读取多个 xlsx 文件,每个文件都有多个工作表 - purrr

python - 在python numpy.linalg中使用逆矩阵函数 "inv"

algorithm - 最小化最大成本

r - R 中梯度下降和线性模型之间 Theta 值的差异

r - 对变量不匹配求和

C++ Matrix模板,矩阵矩阵和矩阵数字乘法之间的歧义

r - 矩阵过滤一次返回矩阵,另一次仅返回一个向量

c++ - 如何在STL vector 矩阵中插入元素?