我需要在R中创建以下类型的矩阵。让m
为每列递增的最大值,n
生成矩阵的列数。
适用于m=3
和n=2
1 0
2 0
3 0
3 1
3 2
3 3
适用于m=4
和n=3
1 0 0
2 0 0
3 0 0
4 0 0
4 1 0
4 2 0
4 3 0
4 4 0
4 4 1
4 4 2
4 4 3
4 4 4
有谁知道如何做到这一点的好方法? slickest 答案的 +1 ;)
答案 0 :(得分:2)
由于我对cummax
的新知识感谢@AnandaMahto和@alexis_laz,我找到了一个使用Kronecker产品的光滑的产品
apply(diag(n) %x% 1:m, 2, cummax)
答案 1 :(得分:1)
这似乎是有效的,除非我错过了一些东西:
ff = function(m, n)
apply(xtabs(rep(seq_len(m), n) ~ seq_len(m * n) + rep(seq_len(n), each = m)),
2, cummax)
ff(3, 2)
ff(4, 3)
答案 2 :(得分:1)
我建议的方法是创建一个空矩阵,使用矩阵索引来填充第一组值,然后使用cummax
来完成其余的工作。
myFun <- function(m, n) {
M <- matrix(0, ncol = n, nrow = m*n)
M[cbind(sequence(nrow(M)), 0:(m*n-1) %/% m + 1)] <- sequence(m)
apply(M, 2, cummax)
}