Предположим, у меня есть вектор (x
), значения которого находятся в таком порядке, что если бы они были в матрице nx
на ny
, матрица содержала бы значения, которые увеличиваются на строку, начиная с нижнего левого вверх,Любые оставшиеся незаполненные значения в матрице будут тогда NA
.Позвольте мне проиллюстрировать это на примере:
nr=3
nc=3
mx = matrix(c(7,NA,NA,4:6,1:3), nr, nc, byrow = T)
# [,1] [,2] [,3]
# [1,] 7 NA NA
# [2,] 4 5 6
# [3,] 1 2 3
x = c(mx)
# [1] 7 4 1 NA 5 2 NA 6 3
Теперь я хотел бы переупорядочить x в новый вектор (y
) так, чтобы, если бы значения y
были в матрице, NA
s останется в том же месте, но другие значения будут упорядочены по возрастанию по порядку от левой top .Т.е. y
должен выглядеть следующим образом
my = matrix(c(1,NA,NA,2:4,5:7), nr, nc, byrow = T)
# [,1] [,2] [,3]
# [1,] 1 NA NA
# [2,] 2 3 4
# [3,] 5 6 7
y = c(y)
# [1] 1 2 5 NA 3 6 NA 4 7
Я хочу найти вектор индексов, который отображает x в y.В этом случае это будет
indices = c(3, 6, 5, 4, 9, 8, 7, 2, 1)
identical(x[indices], y)
#TRUE
Но я изо всех сил пытаюсь найти простой алгоритм, который может генерировать indices
для любых значений nr
, nc
и любого количества значений NAв x
.Какие-либо предложения?NB, мы можем предположить, что никогда не будет достаточно NA
s, чтобы заполнить всю строку матрицы