2016-04-17 31 views
0

Rを使用して値の行替える方法は? 私は行列を持っており、その値の一部をインデックスベクトルで置き換えたいと考えています。問題は、Rが行単位ではなく、列単位で値を自動的に抽出することです。 あなたは私のコードと以下の結果を見つける:Rプログラミング:行ごとに値を置き換える方法は?

 [,1] [,2] [,3] [,4] [,5] [,6] [,7] 
[1,] 1 0 0 0 0 0 1 
[2,] 0 0 0 1 0 0 0 
[3,] 0 1 0 1 0 0 0 
[4,] 0 0 0 0 0 0 0 
[5,] 0 0 0 0 0 0 0 
[6,] 0 0 0 0 0 0 0 
> 

どうやらRは、値の列ごとの交換を行います。私は実際に取得したいことは、この意味の行方向のバージョンがある

Matrix=matrix(rep(0,42),nrow=6,ncol=7,byrow=TRUE) 
v=c(1,7,11,16,18) 
Matrix[v]=1 
Matrix 
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] 
[1,] 1 1 0 0 0 0 0 
[2,] 0 0 0 0 0 0 0 
[3,] 0 0 0 0 0 0 0 
[4,] 0 0 1 0 0 0 0 
[5,] 0 1 0 0 0 0 0 
[6,] 0 0 1 0 0 0 0 

デフォルトでは 行を入れ替えて値を取得する最も良い方法は何ですか?

ありがとうございます!

+0

を行うことができますIndの2列目の行列Indの最初の列の行のインデックスとcolumnindicesを計算していると仮定すると行インデックスと列インデックスに表示されます。行列 'Ind'の第1列の行インデックスと' Ind'の第2列の列インデックスを計算したとすると、 'Matrix [Ind] < - 1'を実行できます。 – jogo

+1

行列[v、]ヘルプを読む"["]。 – Roland

答えて

2

あなたは一次元行優先するindizesと列のインデックスを再計算できます。あなたはMatrix[Ind] <- 1

Matrix <- matrix(rep(0,42),nrow=6,ncol=7,byrow=TRUE) 
v <- c(1,7,11,16,18) 
Row <- (v-1) %/% ncol(Matrix) +1 
Col <- (v-1) %% ncol(Matrix) +1 
Matrix[cbind(Row,Col)] <- 1 
Matrix 
#  [,1] [,2] [,3] [,4] [,5] [,6] [,7] 
# [1,] 1 0 0 0 0 0 1 
# [2,] 0 0 0 1 0 0 0 
# [3,] 0 1 0 1 0 0 0 
# [4,] 0 0 0 0 0 0 0 
# [5,] 0 0 0 0 0 0 0 
# [6,] 0 0 0 0 0 0 0 
0

あなたは彼らが賢明行か、次の操作を行うことができます作るためにあなたの1のやり直しができます

Matrix=matrix(rep(0,42),nrow=6,ncol=7,byrow=TRUE) 
v=c(1,7,11,16,18) 
Matrix<-t(Matrix) 
Matrix[v]=1 
Matrix<-t(Matrix) 
Matrix 

    [,1] [,2] [,3] [,4] [,5] [,6] [,7] 
[1,] 1 0 0 0 0 0 1 
[2,] 0 0 0 1 0 0 0 
[3,] 0 1 0 1 0 0 0 
[4,] 0 0 0 0 0 0 0 
[5,] 0 0 0 0 0 0 0 
[6,] 0 0 0 0 0 0 0 
1

を行うことができます私たちは、あなたが一次元を再計算でき

+(matrix(seq_along(Matrix) %in% v, ncol=ncol(Matrix), nrow=nrow(Matrix), byrow=TRUE)) 
#  [,1] [,2] [,3] [,4] [,5] [,6] [,7] 
#[1,] 1 0 0 0 0 0 1 
#[2,] 0 0 0 1 0 0 0 
#[3,] 0 1 0 1 0 0 0 
#[4,] 0 0 0 0 0 0 0 
#[5,] 0 0 0 0 0 0 0 
#[6,] 0 0 0 0 0 0 0 
関連する問題