在R中,考虑到通用矩阵A,如何将三角形NA移动到矩阵B中的位置?如果矩阵是m x n?
怎么办?> A <- matrix(c(3, NA, NA, 4, 2, NA, 1, 5, 3), nrow = 3)
> A
[,1] [,2] [,3]
[1,] 3 4 1
[2,] NA 2 5
[3,] NA NA 3
> B <- matrix(c(3, 2, 3, 4, 5, NA, 1, NA, NA), nrow = 3)
> B
[,1] [,2] [,3]
[1,] 3 4 1
[2,] 2 5 NA
[3,] 3 NA NA
谢谢!
答案 0 :(得分:5)
我不知道是否有更惯用的方式,但这似乎可以做你想要的:
A <- matrix(c(3, NA, NA, 4, 2, NA, 1, 5, 3), nrow = 3)
A
[,1] [,2] [,3]
[1,] 3 4 1
[2,] NA 2 5
[3,] NA NA 3
t(apply(A, 1, function(x) x[order(is.na(x))]))
[,1] [,2] [,3]
[1,] 3 4 1
[2,] 2 5 NA
[3,] 3 NA NA
A <- matrix(c(3, NA, NA, NA, 4, 2, NA, NA, 1, 5, 3, NA), nrow=4)
A
[,1] [,2] [,3]
[1,] 3 4 1
[2,] NA 2 5
[3,] NA NA 3
[4,] NA NA NA
t(apply(A, 1, function(x) x[order(is.na(x))]))
[,1] [,2] [,3]
[1,] 3 4 1
[2,] 2 5 NA
[3,] 3 NA NA
[4,] NA NA NA
A <- matrix(c(3, NA, NA, 4, 2, NA, 1, 5, 3, 6, 7, 8), nrow=3)
A
[,1] [,2] [,3] [,4]
[1,] 3 4 1 6
[2,] NA 2 5 7
[3,] NA NA 3 8
t(apply(A, 1, function(x) x[order(is.na(x))]))
[,1] [,2] [,3] [,4]
[1,] 3 4 1 6
[2,] 2 5 7 NA
[3,] 3 8 NA NA
答案 1 :(得分:1)
一种可能的方法是在列上旋转180。我假设A的NA三角形用于在旋转后在矩阵B中设置NA。可以使用相同的技术在A矩阵中旋转。
A <- matrix(c(3, NA, NA, 4, 2, NA, 1, 5, 3), nrow = 3)
A
[,1] [,2] [,3]
[1,] 3 4 1
[2,] NA 2 5
[3,] NA NA 3
B <- matrix(c(3, 2, 3, 4, 5, 4, 1, 6, 8), nrow = 3)
B
[,1] [,2] [,3]
[1,] 3 4 1
[2,] 2 5 6
[3,] 3 4 8
#Find NA in A
NA_Val <- is.na(A)
#Rotate NA matrix on column
NA_VAL_180 <- NA_Val[1:nrow(NA_Val),ncol(NA_Val):1]
#Set corresponding values NA in B.
B[NA_VAL_180] <- NA
B
[,1] [,2] [,3]
[1,] 3 4 1
[2,] 2 5 NA
[3,] 3 NA NA