2017-11-12 9 views
1

私はそれで行列のセルの値を行/列の名前で合計する方法はありますか?

Authors <- c("Abel","Babel","Cain","Devil","Esau") 

は、私はこれらの3人による共著論文につまずいていますゼロ

allAuthors <- matrix(0L,nrow=length(Authors),ncol=length(Authors),dimnames=list(Authors,Authors)) 

で初期化され、全体の隣接行列を構築する作者の全体的なリストを持っている想像し

paperAuthors <- c("Babel","Cain","Devil") 

これらのコラボレーションの隣接行列をすべて1で設定します。

coAuth <- matrix(1L,nrow=length(paperAuthors),ncol=length(paperAuthors),dimnames=list(paperAuthors,paperAuthors)) 

質問:

どのように私は指標として行とcolum名を使用して対応するallAuthors マトリックス細胞にcoAuth行列セルの値を合計しますか?

つまり、paperAuthorsの作者の交点に1を持つallAuthors行列のセルを取得したいと思いますが、他のすべては0のままです。

は、あなたのニーズに合わせて仕事をサブセット化だろうか、新しい行列の加算演算を定義する必要があるのですか?非常に多くの

答えて

0

最初に、coAuthマトリックスのインデックスを取得します。

ind <- which(coAuth == 1, arr.ind = TRUE) 

ここで、対応するインデックスをallAuthorsマトリックスで見つける必要があります。

ind.allAuthors <- cbind(
    match(rownames(coAuth), rownames(allAuthors))[ind[, 'row']], 
    match(colnames(coAuth), colnames(allAuthors))[ind[, 'col']]) 

そして今、我々は両方の行列から要素を合計することができます:あなたのソリューションがうまく動作するように見える@plamenpetrov

allAuthors[ind.allAuthors] <- allAuthors[ind.allAuthors] + 1 
+0

Moltesgrà[email protected] ernest-a!あなたのアプローチはうまくいきますが、私の無知でPlamen Petrovからのもう一つの答えがわかりやすく、コード化されています。 –

+0

!私の答えは、インデックスとして行列を使用して、行列/配列から任意の要素を選択することができます。 Plamenの答えはベクトルインデックスを使用しますが、これは簡単ですが、矩形領域のみを選択することができます。説明を見てください:https://cran.r-project.org/doc/manuals/r-release/R-intro.html#Array-indexing –

0

をありがとう

allAuthors[paperAuthors, paperAuthors] <- 
    allAuthors[paperAuthors, paperAuthors] + 1 
allAuthors 
+0

は場合であっても共著者は、全体の中の隣接するスペースではありませんありがとうございましたマトリックス! –

+0

あなたがうまくいけば答えを受け入れるかもしれません:) –

+0

こんにちは、私の例ではあなたの例が完璧に機能していましたが、私の実際の状況では、それはうまくいかなかったのです。この幻想的でも初心者の不親切な言葉についても教えてくれてありがとうございました:-) –