我想使用来自其他两个矩阵的信息来填充矩阵
我已经设法使用给定的数据集执行此操作,但我需要将其集成到一个更大的脚本中,并且我用来填充更大矩阵的两个矩阵的大小每次都可能不同。
示例数据:
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]
}
}
任何帮助将不胜感激!
答案 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)
例如。