我目前有两个矩阵:
[,1]
[1,] 0
[2,] 5
[3,] 1
和
[,1] [,2] [,3]
[1,] 0 0 1
[2,] 0 9 9
[3,] 1 1 1
是否可以按第一个矩阵上的数字自动水平向右移动行,并且所有空位都补0?结果将是这样的:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 0 0 1 0 0 0 0 0
[2,] 0 0 0 0 0 0 9 9
[3,] 0 1 1 1 0 0 0 0
最佳答案
您可以将maply()
与append()
一起使用:
t(mapply(append, asplit(mat2, 1), mat1,
MoreArgs = list(x = rep(0, max(mat1)))))
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
# [1,] 0 0 1 0 0 0 0 0
# [2,] 0 0 0 0 0 0 9 9
# [3,] 0 1 1 1 0 0 0 0
数据
mat1 <- matrix(c(0, 5, 1))
mat2 <- matrix(c(0, 0, 1, 0, 9, 1, 1, 9, 1), 3)
关于r - 如何根据值在矩阵上水平移动行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72125454/