我有矩阵:
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
答案 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)
一种显而易见的方法是使用traits
对species
矩阵进行子集,如下所示:
traits[species, ]
但是,这只能假设行名称是唯一的 - 如果它们不是,则只返回第一个匹配。
出于这个原因,我强烈建议使用更强大的:
traits[rownames(traits) %in% species, ]