r - 如何根据值在矩阵上水平移动行

标签 r matrix vector

我目前有两个矩阵:

      [,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/

相关文章:

java - 如何实现二维变换矩阵?

c++ - 在 vector c++ 中显示运行时断言错误

C++:在循环内部或外部声明一个 vector

R - 每日汇总到每周汇总,开始日期为周六

java:如何实现数学解析

ruby - ruby 中的大型矩阵代数计算

matlab - 在 Matlab 中向矩阵添加 header

R data.table使用日期的组子集的总和

r - 使用列名创建两列数据框

r - ggplot2:添加用于 facet_grid 的变量名称