Число вхождений следующего значения в вектор в R - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть вектор со случайными числами от 1 до 7, и я хочу иметь возможность определить следующее число в векторе, который следует за первым значением, чтобы я мог искать шаблоны и получить матрицу значений 7x7, которая показывает, какчасто определенное число следует за другим.

Первое число в строках и число следующих чисел в столбцах.

В настоящее время я пытаюсь сделать это с помощью двойного цикла, но в процессе запутываюсь.

Например -

Example vector-

floor(runif(10,1,8))
[1] 3 5 6 6 6 1 7 7 5 3

Answer-

  1  2  3  4  5  6  7
1 0  0  0  0  0  0  1
2 NA NA NA NA NA NA NA
3 0  0  0  0  1  0  0
4 NA NA NA NA NA NA NA
5 0  0  1  0  0  1  0
6 1  0  0  0  0  3  0
7 0  0  0  0  1  0  1

1 Ответ

0 голосов
/ 04 декабря 2018

Учитывая вектор

v <- c(3, 5, 6, 6, 6, 1, 7, 7, 5, 3)

, если вы позвоните table() на вектор, вы получите счетчик каждого элемента

table( v )
# v
# 1 3 5 6 7 
# 1 2 2 3 2

Если вы позвоните table() на несколько векторов,Вы получаете счет для каждой комбинации значений.

Поскольку вы хотите «посчитать», сколько раз значение появляется со значением рядом с ним, вы можете вызвать table() для исходного вектора, и этот же вектор сместился на одно значение вправо.

table( v[1:(length(v)-1)], v[2:length(v)] )

#  y
# x  1 3 5 6 7
#  1 0 0 0 0 1
#  3 0 0 1 0 0
#  5 0 1 0 1 0
#  6 1 0 0 2 0
#  7 0 0 1 0 1

Что можно сделать более лаконичным (любезно предоставлено Julius Vainora )

table(head(v, -1), tail(v, -1))

Примечание: результат не включает строки NAу вас есть в вашем вопросе.

...