2017-01-17 18 views
3

行列を掛け算する答えを見てきました。しかし、私は完全な数値を持つ単一の行列を持っています。 例として:行列の複数の列を同じ行列の別の列で掛け算するR

matrix = read.table(text = 
"ID Mult t1 t2 t3 t4 t5 
4 0.164 10 20 30 40 50 
16 0.581 5 10 5 10 5 
42 0.008 16 17 18 19 20 
91 0.328 20 20 20 20 20 
103 0.108 103 42 56 84 61", 
h = T) 

私は別に、乗算器t5t1を掛け、そして私の行列に新しい列に結果を入れたいです。

私はそれを列単位で行いますが、実際には200列以上あります。

うまくいけば、誰かがより簡単な修正を提案できることを望みます。あなたが行うことができ

+1

ようこそ。あなたが相談した他の情報源を列挙し、あなたの状況がどのように異なっているかを説明することは、常に良い考えです(そうでなければ、あなたの質問に繰り返しとしてフラグが立てられるかもしれません)。あなたは[この記事](http://stackoverflow.com/q/12673891/1152809)を見ましたか?また、Rの質問に簡単に他の人があなたを助けられるようにする方法については、[this post](http://stackoverflow.com/q/5963269/1152809)を参照してください。これは 'dput'を使ってデータを出力するように指定しています。その結果、私たちのローカルRで簡単に実行し、あなたが見ているものを見ることができます。また、何か助けを仰いでupvoteすることを忘れないでください、そして答えを正しいものとしてマークしてください。 –

答えて

1

df=read.table(text="ID Mult t1 t2 t3 t4 t5 
4 0.164 10 20 30 40 50 
16 0.581 5 10 5 10 5 
42 0.008 16 17 18 19 20 
91 0.328 20 20 20 20 20 
103 0.108 103 42 56 84 61",h=T) 

df[,c(paste0(colnames(df[,grepl("^t.*",colnames(df),perl = T)]),"bis"))]=df[,grepl("^t.*",colnames(df),perl = T)]*df$Mult 

df[,grepl("^t.*",colnames(df),perl = T)]サブセットdfを列のみが「T」
df[,c(paste0(colnames(df[,grepl("^t.*",colnames(df),perl = T)]),"bis"))]で始まるしているには、前のサブセットのcolnames()を取り、「ビス」とpaste0()またはいずれかを使用してそれらを連結します変更を示す文字列。これにより、乗算の結果で満たされる新しい列が作成されます。

> df 
    ID Mult t1 t2 t3 t4 t5 t1bis t2bis t3bis t4bis t5bis 
1 4 0.164 10 20 30 40 50 1.640 3.280 4.920 6.560 8.200 
2 16 0.581 5 10 5 10 5 2.905 5.810 2.905 5.810 2.905 
3 42 0.008 16 17 18 19 20 0.128 0.136 0.144 0.152 0.160 
4 91 0.328 20 20 20 20 20 6.560 6.560 6.560 6.560 6.560 
5 103 0.108 103 42 56 84 61 11.124 4.536 6.048 9.072 6.588 
0

いくつかはループが好きではありませんが、ときどきします。これはその時のひとつです:)

mydf<-matrix 
for (i in 3:length(mydf)){ 
    mydf[,length(mydf)+1] <- mydf$Mult * mydf[i] 
} 
mydf 
    ID Mult t1 t2 t3 t4 t5 t1.1 t2.1 t3.1 t4.1 t5.1 
1 4 0.164 10 20 30 40 50 1.640 3.280 4.920 6.560 8.200 
2 16 0.581 5 10 5 10 5 2.905 5.810 2.905 5.810 2.905 
3 42 0.008 16 17 18 19 20 0.128 0.136 0.144 0.152 0.160 
4 91 0.328 20 20 20 20 20 6.560 6.560 6.560 6.560 6.560 
5 103 0.108 103 42 56 84 61 11.124 4.536 6.048 9.072 6.588 
関連する問題