gpt4 book ai didi

用行名替换 R 中的矩阵值另一个矩阵

转载 作者:行者123 更新时间:2023-12-01 10:01:17 26 4
gpt4 key购买 nike

我有一个关于在 R 中匹配两个矩阵以执行非常简单的计算的问题。我有工作代码(如下),但我觉得必须有一种更有效和“类似 R”的方法来做到这一点。非常欢迎任何线索。

问题

我有两个包含相关信息的矩阵。 m1 包含一堆引用。 m2 包含有关这些引用(零或一)的数据。当您从 m2 中查找数据时,我想知道 m1 的哪些行在第一列中为“0”,在第二列中为“1”。这是一个玩具示例:

> m1 <- matrix(data = c(51,52,53,51,54,55,56,57), nrow = 4, ncol = 2)
> m1
[,1] [,2]
[1,] 51 54
[2,] 52 55
[3,] 53 56
[4,] 51 57

> m2 <- matrix(data = c(0,0,1,0,0,1,1), nrow = 7, ncol = 1)
> rownames(m2) <- c(51,52,53,54,55,56,57)
> m2
[,1]
51 0
52 0
53 1
54 0
55 0
56 1
57 1

一般属性是我已经可以保证 m1 中的每个条目在 m2 中都有对应的行名称,而且我需要在更大的矩阵上执行此操作数百万次,因此速度很有用。

我想要做的是使用 m2 找出 m1 的哪些行在第一列中具有零,在第二列中具有 1。在这种情况下,只有 m1 的最后一行具有该属性。

我的解决方案

我有一个相对好的。对此的解决方案,它使用 apply() 并且还不错:

> is.zero.one <- function(line, m2){
+ start = m2[as.character(line[1]),]
+ end = m2[as.character(line[2]),]
+ if(start==0 && end==1){return(TRUE)}
+ else{return(FALSE)}
+}
> apply(m1, 1, is.zero.one, m2)
[1] FALSE FALSE FALSE TRUE

这很好用。但是感觉笨重。

我的问题

有谁知道更聪明/更快/更自然的方法吗?我查看了 match() 和相关函数,但无法提出解决方案。在这里搜索相关问题的同上。我提出这个问题的部分原因是我不是一个非常优秀的 R 程序员,所以即使这被证明是一个不错的解决方案,我也很想看看其他人是如何解决它的。

感谢您的帮助。

最佳答案

 matrix( m2[ match(m1, rownames(m2) )], ncol=2)
[,1] [,2]
[1,] 0 0
[2,] 0 0
[3,] 1 1
[4,] 0 1

m3 <- matrix(m2[match(m1, rownames(m2) )], ncol=2)

which( m3[,1]==0 & m3[,2]==1 )
#[1] 4

m3[,1]==0 & m3[,2]==1
# [1] FALSE FALSE FALSE TRUE

关于用行名替换 R 中的矩阵值另一个矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15693340/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com