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

明らかなアプローチの1つは、次のようにtraitsマトリックスをサブセット化することです。species

traits[species, ]

ただし、これは行名が一意であると想定してのみ機能します。一意でない場合は、最初の一致のみが返されます。

そのため、より堅牢なものを使用することを強くお勧めします。

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

サブセット化機能speciesを使用して、に直接格納されている行名でインデックスを作成できます。[

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

この例では、数値インデックスベクトルまたは論理ベクトルではなく、文字ベクトルを介してインデックスを作成しています。詳細については、を参照?"["してください。

于 2012-06-09T20:26:01.673 に答える