首页 > 解决方案 > 如何基于另一个矩阵创建一个矩阵

问题描述

我有一个 30 行 12 列的矩阵。我想创建另一个基于这个原始矩阵的矩阵。我想让前 6 列中的条目是原始矩阵条目的 2 倍。我想让 7-11 列中的条目是原始矩阵的整数的 1.5 倍。我希望第 12 列与原始矩阵相同。

我有以下代码,但它没有给我我正在寻找的输出

sales=matrix(rpois(360, 10), nrow=30)
sales_dol=matrix(, nrow=30, ncol=12)

for (j in 1:12) {
  if (j<7)
    sales_dol[,j]=sales[,j]*2
} else if (j<12){
    sales_dol[,j]=sales[,j]*1.5
} else{
    sales_dol[,j]=sales[,j]
} 

 sales_dol

标签: rmatrix

解决方案


由于 R 函数是矢量化的,因此您不需要for循环来执行此操作。

set.seed(123)
sales=matrix(rpois(360, 10), nrow=30)
head(sales)

#     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
#[1,]    8   12   11    6   10   16    9    6   10    14     8    12
#[2,]    9   11   12   15    8    7   10    9   11    12     7     7
#[3,]   14    9    9   10   10   15   10   16   10    16     8    11
#[4,]   10    9    9   13   17    6   13    9    4    13    10    16
#[5,]   10    8    7    8   16   11    8    5    7    11     7     9
#[6,]   15    7    7    7    5    8    6    4    9     7    10     3

sales_dol <- cbind(sales[, 1:6] * 2, sales[, 7:11] * 1.5, sales[, 12])
head(sales_dol)

#     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
#[1,]   16   24   22   12   20   32 13.5  9.0 15.0  21.0  12.0    12
#[2,]   18   22   24   30   16   14 15.0 13.5 16.5  18.0  10.5     7
#[3,]   28   18   18   20   20   30 15.0 24.0 15.0  24.0  12.0    11
#[4,]   20   18   18   26   34   12 19.5 13.5  6.0  19.5  15.0    16
#[5,]   20   16   14   16   32   22 12.0  7.5 10.5  16.5  10.5     9
#[6,]   30   14   14   14   10   16  9.0  6.0 13.5  10.5  15.0     3

推荐阅读