首页 文章

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

提问于
浏览
3

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

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

    你可以这样做:

    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

    有些人不喜欢循环,但我有时会这样做 . 这是其中一次:)

    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
    

相关问题