2017-11-27 2 views
5

の行を合計することにより、Rで新しいマトリックスを作成します。私は何をしたいかだから私は(の出力にそれを呼びましょう)次の行列を持つ別の行列

> output 

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

を追加することによって、新しい行列(OUTPUT2)を作成することです行は2つのグループに分かれています。例えば、新たな行列の最初の行は次のようになります

output2[1,] <- output[1,] + output[2,] 

新しいマトリックスOUTPUT2の第2行は、古い出力行列の第4行目の和から成るであろう:

output2[2,] <- output[3,] + output[4,] 

など。私は、これをコード化する最良の方法が何であるのだろうと考えていました。より大きな行列にも同じことをする必要があると考えています。私はseq()関数とおそらくforループでダミー変数を作ることを検討していました。

もっと簡単な方法はありますか?

編集:

dput(出力)

構造(C(1、1、1、0、1、1、1、1、1、1、1、1、 1、0、0、0、1、 1、0、1、1、1、1、0、1、1、1、1、1、1、0、0、0、0、1、1、0 、0、 1、0、0、0、0、0、0、0、0、1、0、0、1、1、1、0、0、0、1、0、0、 0,0 、0、0、0、0、1、0、0、1、0、0、0、0、0、1、1、0、0、1、0、 0、0、0、0、1、 1、0、0、1、0、0、0、0、0、1、1、0、0、1、0、0、 0、0、1、0、0、0、0、0、 0、0、0、0、1、0、0、0、0、0、0、0、0、 0、1、0、0、0、0、0、0、0、0、0、1 、0、0、0、0、0、0、0、0、0、 1、0、0、0、0、0、0、1、1、1、0、1、1、1、1、 1、1、0、0、0、1、 0、0、0、0、0、0、1、1、1、0、0、0、1、0、0、0、0、0、0 、1、0、 0、0、0、0、0)、.Dim = C(10L、19L))

+1

'dput(yourMatrix)を投稿してください' –

答えて

1

mがあなたの行列である場合には、この試してみてください。両方

m[seq(1,by=2,to=nrow(m)),]+m[seq(2,by=2,to=nrow(m)),] 
+0

はい、私はそれは私が考えていたもののために働くと思います!どうもありがとう! –

1

これらを:

  • ハンドルの両方の偶数と奇数
  • をkと2を交換することによって行をkに一般行の数は、
  • が短い - コードの1行または容易に行うことができる一行
  • (1)のみ基底関数、すなわちないパッケージとを使用して(2 )は和以外の関数に容易に一般化できる。
容易 glを使用して作成され c(1, 1, 2, 2, ..., 5, 5)の第2引数と

1)rowsum使用rowsum

nr <- nrow(output) 
rowsum(output, gl(nr, 2, nr)) 

2)rollapply別の可能性は、動物園からrollapply使用することです。私たちは行数があったことを知っていた場合でも、当社は、必要に応じて整列し、部分的に引数を省略することができます。

library(zoo) 
rollapply(output, 2, by = 2, sum, align = "left", partial = TRUE) 
+0

両方とも正常です!しかし、rollapply()は少し遅いようです。あなたの時間をありがとう! –

1

別のオプションは、ベクトルのリサイクルを使用することです:

matrix(output[c(TRUE, FALSE)] + output[c(FALSE, TRUE)], ncol = ncol(output)) 
+0

このソリューションは私にとっても役立ちます。助けてくれてありがとう! –

関連する問題