将矩阵中的多个列乘以R中相同矩阵中的另一列

时间:2017-01-17 16:59:10

标签: r matrix-multiplication

我已经看到了将一个矩阵与另一个矩阵相乘的答案。但我有一个单一的矩阵,完全数字。 举个例子:

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)

我希望将t1乘以t5乘以乘数,然后将结果放入矩阵的新列中。

我会逐列地进行,但事实上我有超过200列!

希望有人能提出更简单的解决方法。

2 个答案:

答案 0 :(得分: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()和“bis”或任何字符串将它们连接起来以指示更改。这将创建填充乘法结果的新列。

> 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

答案 1 :(得分: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