将 NA 移动到矩阵中每一列的开头
Move NA to the start of each column in a matrix
我有一个包含如下数据的矩阵:
col1 col2 col3 col4 col5
2 3 2 8 3
7 1 0 4 NA
5 8 1 NA NA
9 6 NA NA NA
4 NA NA NA NA
我想将数据重新排列为以下结果,基本上是将 NA
移动到每列的顶部:
col1 col2 col3 col4 col5
2 NA NA NA NA
7 3 NA NA NA
5 1 2 NA NA
9 8 0 8 NA
4 6 1 4 3
如您所见,新数据的排序向量基于此排序矩阵:
col1 col2 col3 col4 col5
1 5 4 3 2
2 1 5 4 3
3 2 1 5 4
4 3 2 1 5
5 4 3 2 1
我认为最好的方法是将排序矩阵应用于原始矩阵,因此 col1 排序向量排序 col1,col2 排序向量排序 col2,依此类推。
使用此数据
your_matrix = structure(c(2L, 7L, 5L, 9L, 4L, 3L, 1L, 8L, 6L, NA, 2L, 0L, 1L,
NA, NA, 8L, 4L, NA, NA, NA, 3L, NA, NA, NA, NA), .Dim = c(5L,
5L), .Dimnames = list(NULL, c("col1", "col2", "col3", "col4",
"col5")))
your_matrix
# col1 col2 col3 col4 col5
# [1,] 2 3 2 8 3
# [2,] 7 1 0 4 NA
# [3,] 5 8 1 NA NA
# [4,] 9 6 NA NA NA
# [5,] 4 NA NA NA NA
我们可以应用一个排序函数,将 NA
s 移动到末尾:
apply(your_matrix, MARGIN = 2, FUN = function(x) x[order(!is.na(x))])
# col1 col2 col3 col4 col5
# [1,] 2 NA NA NA NA
# [2,] 7 3 NA NA NA
# [3,] 5 1 2 NA NA
# [4,] 9 8 0 8 NA
# [5,] 4 6 1 4 3
我有一个包含如下数据的矩阵:
col1 col2 col3 col4 col5
2 3 2 8 3
7 1 0 4 NA
5 8 1 NA NA
9 6 NA NA NA
4 NA NA NA NA
我想将数据重新排列为以下结果,基本上是将 NA
移动到每列的顶部:
col1 col2 col3 col4 col5
2 NA NA NA NA
7 3 NA NA NA
5 1 2 NA NA
9 8 0 8 NA
4 6 1 4 3
如您所见,新数据的排序向量基于此排序矩阵:
col1 col2 col3 col4 col5
1 5 4 3 2
2 1 5 4 3
3 2 1 5 4
4 3 2 1 5
5 4 3 2 1
我认为最好的方法是将排序矩阵应用于原始矩阵,因此 col1 排序向量排序 col1,col2 排序向量排序 col2,依此类推。
使用此数据
your_matrix = structure(c(2L, 7L, 5L, 9L, 4L, 3L, 1L, 8L, 6L, NA, 2L, 0L, 1L,
NA, NA, 8L, 4L, NA, NA, NA, 3L, NA, NA, NA, NA), .Dim = c(5L,
5L), .Dimnames = list(NULL, c("col1", "col2", "col3", "col4",
"col5")))
your_matrix
# col1 col2 col3 col4 col5
# [1,] 2 3 2 8 3
# [2,] 7 1 0 4 NA
# [3,] 5 8 1 NA NA
# [4,] 9 6 NA NA NA
# [5,] 4 NA NA NA NA
我们可以应用一个排序函数,将 NA
s 移动到末尾:
apply(your_matrix, MARGIN = 2, FUN = function(x) x[order(!is.na(x))])
# col1 col2 col3 col4 col5
# [1,] 2 NA NA NA NA
# [2,] 7 3 NA NA NA
# [3,] 5 1 2 NA NA
# [4,] 9 8 0 8 NA
# [5,] 4 6 1 4 3