#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)
.
Я загрузил фотографии и пояснения по следующим ссылкам.
как подсчитать частоту некоторых фиксированных значений в каждой строке.
некоторые фиксированные значения в разных столбцах двух строк.
Комментарии:
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) Шаблона и т. Д.