1

我有矩阵:

traits <- matrix(c(1,0,1, 1,0,0, 0,0,0), nrow = 3, ncol=3, byrow=TRUE,
           dimnames = list(c("sp1", "sp2", "sp3"),c("Tr1", "Tr2", "Tr3")))

和一份清单

species <-c("sp1", "sp2")

如何过滤“特征”矩阵,使其仅返回匹配项,即

traits.filtered<-matrix(c(1,0, 1,1, 0,0), nrow = 2, ncol=3, byrow=TRUE,
           dimnames = list(c("sp1", "sp2"),c("Tr1", "Tr2", "Tr3")))

谢谢你,-伊丽莎白

4

3 回答 3

7
traits[row.names(traits)%in%species,]
于 2012-06-09T20:23:17.617 回答
2

species您可以直接使用[subsetting 函数按存储的行名进行索引:

> traits[species, ]
    Tr1 Tr2 Tr3
sp1   1   0   1
sp2   1   0   0

在这种情况下,您通过字符向量而不是数字索引向量或逻辑向量进行索引。查看?"["更多。

于 2012-06-09T20:26:01.673 回答
2

一种明显的方法是traits使用以下方法对矩阵进行子集化species

traits[species, ]

但是,这仅在行名称是唯一的情况下才有效 - 如果不是,则仅返回第一个匹配项。

出于这个原因,我强烈建议使用更强大的:

traits[rownames(traits) %in% species, ]
于 2012-06-10T00:39:52.823 回答