如何根据其他矩阵的行名称对矩阵进行子集和重新排序

问题描述 投票:0回答:2

我有标记数据(作为矩阵)标记,其中行名是个人的名称,同名是标记的名称。

marker <- 
              BBLM062 BBLM00182 BBLMOO587.......
ALEN294945     AA  AA  AT ....
ALEN29394      AT  AA  TT ....
ALEN49494888   AT  AA  TT ....
ALEN26424      AA  AA  AA ....
ALEN38764      AA  AT  AA ....
ALEN29794      AA  AT  AA ....
......
(282 x 1082)

我有另一个数据集pheno(也作为矩阵),其中行名是个人名称,colname是特征的名称

pheno <-
              height weight colour ......
ALEN26494     162  3.5  3
ALEN49494888  154  3.8  5
ALEN494967    131  4.0  5
ALEN49678     152  3.9  7
ALEN294945    138  4.9  1
.......
(260 x 7)

“ pheno”中的所有个体也以“ marker”出现,但顺序不同。我有3个问题

  1. 如何基于'pheno'的行名对'marker'进行子集化,或从'marker'中排除'pheno'中不存在的个体;
  2. 如何根据“标记”对“现象”中的个体进行重新排序,反之亦然(我从另一个具有900个标记的种群'marker2'中获得了标记数据-名称是标记名称;
  3. 如何根据问题名称或'marker2'来对'marker'进行子集化,并像在问题2中一样对它们进行重新排序

提前感谢。

r sorting matrix subset
2个回答
0
投票

如何基于'pheno'的行名对'marker'进行子集设置>

使用%in%的子集

pheno[rownames(pheno) %in% rownames(marker), ]

从“标记”中排除不存在于“现象”中的个人:

添加以上内容:

pheno[!rownames(pheno) %in% rownames(marker), ]

如何基于“标记”对“表”中的个人重新排序

使用match

pheno[match(rownames(pheno), rownames(marker)),]

如何根据问题名称或'marker2'来对'marker'进行子集化,并像在问题2中一样对它们进行重新排序

如果marker2中的所有列都出现在marker中。

marker[, colnames(marker2)]

0
投票

如果您分享可复制的示例,您将获得更多帮助。您可以使用dput( )功能来帮助共享数据。

© www.soinside.com 2019 - 2024. All rights reserved.