40000行9列のAの行列と、40000項目のベクトルBがあります。Bの各項目は1から9までの数字です。Bの項目に対応するAの特定の列に1を割り当てたいと思います。現在、forループを使用しています。
for(r in 1:40000){
A[r,B[r]]=1
}
しかし、それをベクトル化する方法はありますか?ありがとう
あなたは試すことができます
A[cbind(1:nrow(A), B)] <- 1
OPのコードで結果を確認する
for(r in 1:nrow(A1)){
A1[r, B[r]] <- 1
}
identical(A, A1)
#[1] TRUE
ここでは、で作成した行列を使用しcbind
ます。差出人?"["
:
[単一の引数で配列にインデックスを付ける場合、iはxの次元と同じ数の列を持つ行列にすることができます。結果は、iの各行のインデックスのセットに対応する要素を持つベクトルになります。
set.seed(24)
A <- matrix(sample(1:40, 25*9, replace=TRUE), ncol=9)
B <- sample(1:9, 25, replace=TRUE)
A1 <- A
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加