使用来自两个不可预测大小的矩阵的值填充矩阵

时间:2017-01-09 16:40:12

标签: r loops matrix

我想使用来自其他两个矩阵的信息来填充矩阵

我已经设法使用给定的数据集执行此操作,但我需要将其集成到一个更大的脚本中,并且我用来填充更大矩阵的两个矩阵的大小每次都可能不同。

示例数据:

days = 150
block <- matrix(c(50,120,150), nrow=3, ncol=1)

      [,1]
[1,]   50
[2,]  120
[3,]  150

e1     <- matrix(c(0.1,0.5,0.7), nrow=3, ncol=1)

      [,1]
[1,]  0.1
[2,]  0.5
[3,]  0.7

result <- matrix(0, nrow = 150, ncol=1)

我需要创建一个数字向量(取自e1),根据'block'中的每个数字重复自己

下面的代码演示了此实例中的预期结果,但是我正在尝试编写一个更灵活的脚本,可以处理少于或超过3个'块'

我很欣赏这可能是一种更简单的方法,但是我的头脑陷入了循环模式,我似乎无法摆脱它!

for (v1 in 1:days){
  if(v1 <= block[1,1]){
    result[v1,1] <- e1[1,1]
  }
  else if (v1 > block[1,1] & v1 <= block[2,1]){
    result[v1,1] <- e1[2,1]
  }     
  else if (v1 > block[2,1] & v1 <= block[3,1]){
    result[v1,1] <- e1[3,1]
  }
}

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

您可以使用rep

的一个很好的功能来实现这一点
result <- rep(e1, c(block[1], diff(block)))
# cast the vector as a column matrix
result <- matrix(result, length(result))

这是有效的,因为rep将在其第二个参数中接受一个向量,该向量告诉它重复第一个参数的每个元素的次数。

如果您提前了解长度,可以合并线条,例如

result <- matrix(rep(e1, c(block[1], diff(block))), days)

例如。