我想用a替换矩阵的非对角元素 数字序列。 我设法写了这个:
mat[outer(1:nrows(mat), 1:nrows(mat), function(i,j) j!=i)] <- seq(1:182)
但它按列填充数字。我不想用 转置功能,因为我有特定的行名称,我想 保持。
示例
所以如果我有一个矩阵 m
m <- matrix(NA, nrow=5, ncol=5, dimnames=list(letters[1:5], NULL))
m
# [,1] [,2] [,3] [,4] [,5]
# a NA NA NA NA NA
# b NA NA NA NA NA
# c NA NA NA NA NA
# d NA NA NA NA NA
# e NA NA NA NA NA
如何在保持原始矩阵的rownames的同时将序列添加到非对角线:预期输出
# [,1] [,2] [,3] [,4] [,5]
# a NA 1 2 3 4
# b 5 NA 6 7 8
# c 9 10 NA 11 12
# d 13 14 15 NA 16
# e 17 18 19 20 NA
答案 0 :(得分:3)
我们可以尝试
mat[lower.tri(mat, diag=FALSE)|upper.tri(mat, diag=FALSE)] <- 1:182
或者
mat[!diag(ncol(mat))] <- 1:182
在OP的帖子中使用一个小例子
m[!diag(ncol(m))] <- 1:20
out <- t(m)
dimnames(out) <- rev(dimnames(out))
来自@ user20650评论的rev