通过匹配列表来过滤R中的矩阵

时间:2012-06-09 20:10:12

标签: r filter merge

我有矩阵:

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'矩阵,使其仅返回匹配,即

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")))

谢谢你, -Elizabeth

3 个答案:

答案 0 :(得分:7)

traits[row.names(traits)%in%species,]

答案 1 :(得分:2)

您可以使用species子集函数直接使用[中存储的rownames进行索引:

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

在这种情况下,您通过字符向量而不是数字索引向量或逻辑向量进行索引。有关详情,请参阅?"["

答案 2 :(得分:2)

一种显而易见的方法是使用traitsspecies矩阵进行子集,如下所示:

traits[species, ]

但是,这只能假设行名称是唯一的 - 如果它们不是,则只返回第一个匹配。

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

traits[rownames(traits) %in% species, ]