Как подсчитать частоту некоторых фиксированных значений в каждой строке и столбцах двух разных пар строк матрицы в R с помощью команд цикла

#r

Вопрос:

У меня есть матрица,

A=matrix(c(0,1,2,1,2,0,2,0,1),3,3) . N= 3 ряды и n=3 ряды.

У меня есть некоторые фиксированные значения.

Ro = сколько раз 1 встречается в каждой строке.

R1= n-Ro являются оставшимися значениями в каждой строке.

R11=(1,1)

Я хочу проверить, сколько раз эта пара встречается в разных столбцах двух строк. Ro1=(0,1), (1,0), (1,2), (2,1) Я хочу проверить, сколько раз эти фиксированные значения встречаются в разных столбцах двух строк. Я хочу сделать то же самое для других фиксированных значений Roo=(0,0), (2,2) , а также Ro2=(0,2), (2,0) .

Я загрузил фотографии и пояснения по следующим ссылкам.

как подсчитать частоту некоторых фиксированных значений в каждой строке.

некоторые фиксированные значения в разных столбцах двух строк.

как вычислить это выражение в R

Комментарии:

1. Первые два просты, Ro <- rowSums(A == 1) и R1 <- ncol(A) - Ro , но остальное не так ясно. Должны ли строки/столбцы быть смежными. Каковы, по вашему мнению, будут результаты для ваших примеров данных?

2. большое вам спасибо за ваши ответы. Я должен загрузить фотографии. Пожалуйста, нажмите на синие слова. Это будет полезно для вас, чтобы понять. жду вашего любезного ответа. Заранее спасибо.

3. фиксированные значения: Roo=(0,2) и (2,0). теперь мы берем первый и второй ряды. 1-я строка: 0 1 2-я строка: 1 2 0 . Я хочу проверить, встречаются ли эти фиксированные значения (0,2) в первом столбце, втором столбце или в третьем столбце. ответ » да » один раз в третьей колонке. таким образом, Roo равно 1. то же, что 1-я строка: 0 1 2 3-я строка: 2 0 1 . я хочу проверить, что фиксированное значение встречается в первом столбце, втором столбце или третьем столбце. ответ » да » только один раз в первом столбце. таким образом, Roo= 1 Также для второго ряда и третьего ряда.

Ответ №1:

Это может быть близко к тому, что вы хотите:

 A <- matrix(c(0, 1, 2, 1, 2, 0, 2, 0, 1), 3, 3)
Ro <- rowSums(A == 1)
R1 <- ncol(A) - Ro
 

Это первая часть вашего вопроса. Теперь, чтобы сопоставить шаблоны в парах строк.

 pairs <- as.matrix(expand.grid(Row1=1:3, Row2=1:3))
pairs <- t(pairs[pairs[, 1] < pairs[, 2], ])
pairs
#      [,1] [,2] [,3]
# Row1    1    1    2
# Row2    2    3    3
 

pairs Матрица содержит строки, в которых мы будем искать совпадения: строка 1 с 2, строка 1 с 3 и строка 2 с 3.

 freqcount <- function(A, pairs, pattern) {
     sum(sapply(seq(dim(pairs)[2]), function(i) sum(apply(A[pairs[, i], ], 2,
           function(x) all(x==pattern)))))
}
 

freqcount() Функция будет принимать матрицу A , pairs матрицу и a pattern , которая должна быть матрицей 2×1, например rbind(1, 1) . Теперь нам нужно создать набор шаблонов и искать их в матрице:

 Patts <- t(expand.grid(Row2=0:2, Row1=0:2))[2:1, ]
Freqs <- apply(Patts, 2, function(x) freqcount(A, pairs, pattern=x))
Results <- rbind(Patts, Freqs)
Results
#       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
# Row1     0    0    0    1    1    1    2    2    2
# Row2     0    1    2    0    1    2    0    1    2
# Freqs    0    2    1    1    0    2    2    1    0
 

Таким образом, существует 0 случаев (0, 0) шаблона, 2 из (0, 1) шаблона, 1 из (0, 2) Шаблона и т. Д.