gpt4 book ai didi

r - 对不同维度的矩阵进行子集化

转载 作者:行者123 更新时间:2023-12-04 11:43:55 25 4
gpt4 key购买 nike

假设我有两个不同维度的相似矩阵,其中一些是 row.names共同但顺序不同,例如:

> m1
red yellow blue green black
red 0.000000 2.236068 4.472136 6.708204 8.944272
yellow 2.236068 0.000000 2.236068 4.472136 6.708204
blue 4.472136 2.236068 0.000000 2.236068 4.472136
green 6.708204 4.472136 2.236068 0.000000 2.236068
black 8.944272 6.708204 4.472136 2.236068 0.000000

> m2
purple green blue red
purple 0.000000 0.081172 4.472136 6.708204
green 0.081172 0.000000 0.107647 4.472136
blue 4.472136 0.107647 0.000000 0.073217
red 6.708204 4.472136 0.073217 0.000000

我想子集 m1到一个仅包含与 m2 相同的行的新矩阵.最终结果应如下所示:
> m3
red blue green
red 0.000000 4.472136 6.708204
blue 4.472136 0.000000 2.236068
green 6.708204 2.236068 0.000000

请注意,在“真实”数据中,矩阵有数百个维度。 subset命令似乎是用于引用自身的子集数据,而不是引用其他数据帧或矩阵?无论如何,我尝试创建匹配项的索引,如下所示:
index <- m1 %in% m2 

这很好,但是在尝试使用 cbind 或 for 循环将此对象转换为新矩阵时出现错误。我知道必须有一种相当快速或优雅的方法来做到这一点,但关于这个主题的文档似乎有点简洁。理想情况下改造后 m1m3 ,我想对 m2的匹配元素中的值进行一些基本的算术运算和 m3例如 m2(2,3) - m3(3,2) = -2.128421。希望这是有道理的。

提前谢谢了!!

最佳答案

  m3<-m1[row.names(m1) %in% row.names(m2),]
red yellow blue green black
red 0.000000 2.236068 4.472136 6.708204 8.944272
blue 4.472136 2.236068 0.000000 2.236068 4.472136
green 6.708204 4.472136 2.236068 0.000000 2.236068


m3[,rownames(m3)]
red blue green
red 0.000000 4.472136 6.708204
blue 4.472136 0.000000 2.236068
green 6.708204 2.236068 0.000000

关于r - 对不同维度的矩阵进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19203886/

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