Как найти последовательность чисел в массиве в R?

Я хочу найти конкретную последовательность чисел в массиве. В качестве примера предположим, что я хочу найти последовательность из двух чисел 7, т. Е. С (7,7).

Взять матрицу М, где

set.seed(100)
M = matrix(sample(10,100,replace = T), nrow = 10)

Если вы запустите код, M[5,4] и M[5,5] равны 7. Таким образом, матрица M имеет последовательность, равную той, которую я ищу.

В результате я хотел бы знать индекс строки, в которой находится последовательность, поэтому мой ответ будет 5. Чтобы сделать его еще лучше, я хотел бы знать столбец, с которого начинается последовательность. В этом случае это будет 4.

Я нашел два ответа здесь, на Stackru, связанных с этими темами. Вопрос 1 и Вопрос 2

Вопрос 1 о поиске последовательности в массиве. Я попытался связать решение, данное с apply функционировать как в

apply(M, 1, *solution from Question 1*)

но это не сработало.

Вопрос 2, кажется, делает то, что я хочу, но он в HPH, и я не полностью понял код.

Для этого я использую R. Спасибо за отзыв.

1 ответ

Порядок элементов в матрице или массиве является "главным по столбцу", поэтому вам нужно будет проверить как исходную матрицу, так и ее транспонирование, если вы хотите последовательности, которые встречаются как в столбцах, так и в строках.

> which(diff(M)==0)
[1]  5 17 48 61 68 75
> which(diff(t(M))==0)
[1]  5  7  8 35 40 64 90
> M
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]    4    7    6    5    4    4    5    5    5    10
 [2,]    3    9    8   10    9    2    7    4    6     3
 [3,]    6    3    6    4    8    3   10    6   10     4
 [4,]    1    4    8   10    9    3    7   10   10     5
 [5,]    5    8    5    7    7    6    5    7    1    10
 [6,]    5    7    2    9    5    3    4    7    6     4
 [7,]    9    3    8    2    8    2    5    9    8     6
 [8,]    4    4    9    7    9    3    5    8    3     2
 [9,]    6    4    6   10    3    6    3    9    4     1
[10,]    2    7    3    2    4    3    7    1    8     8

"5" в первом результате, который относится к 5 в позициях [5:6,1], в то время как 5 в "сделанном на транспонированном М" относится к 4 в положении [1, 5:6]. Соседние 7, о которых вы спрашивали, обозначены 35 во втором результате.

Возможно, вы захотите взглянуть на эти две матрицы. Вы можете добавить acolumn a FALSE в конце второй строки и строку o FALSE ниже первой, если вы хотите получить результаты в "соответствие" с оригиналом:

 t(diff(t(M))==0)
       [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9]
 [1,] FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE  TRUE FALSE
 [2,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [3,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [4,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
 [5,] FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
 [6,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [7,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [8,]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [9,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[10,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE
> diff(M)==0
       [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9] [,10]
 [1,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [2,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [3,] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE
 [4,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [5,]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE
 [6,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [7,] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE
 [8,] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [9,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
Другие вопросы по тегам