У меня есть две таблицы в R (женщины и мужчины) с данными отсутствия присутствия. Я хотел бы сделать парные сравнения между ними (строка за строкой), чтобы найти количество ячеек, не разделяемых между каждой парой (т. Е. Сумма ячеек, равная 1 на самке, но не на самке и наоборот) ,Напротив кросс-продукта: как создать новую матрицу из пересечения двух матриц?
Я знаю, что крест продукта (% *%) делает противоположное тому, что мне нужно. Он создает новую матрицу, содержащую сумму разделяемых ячеек между парами самцов и самков (т. Е. Суммарными клетками, равными 1 в обоих).
Ниже приведен пример набора данных:
females <- as.data.frame(matrix(c(0,0,0,1,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1), nrow=5, byrow=T))
males <- as.data.frame(matrix(c(1,0,0,1,1,0,1,0,1,1,1,0,1,0,1,1,1,0,1,1,1,0,1,0,1), nrow=5, byrow=T))
rownames(females) <-c ("female_1","female_2","female_3","female_4","female_5")
rownames(males) <-c ("male_1","male_2","male_3","male_4","male_5")
Так что, если я декартово произведение
as.matrix(females) %*% t(as.matrix(males))
Я получаю
male_1 male_2 male_3 male_4 male_5
female_1 2 2 1 2 1
female_2 1 2 0 2 0
female_3 2 1 3 2 3
female_4 3 3 2 4 2
female_5 3 2 3 3 3
Но мне нужно это (только первая строка)
male_1 male_2 male_3 male_4 male_5
female_1 1 1 3 2 3
.
.
В действительности, мой набор данных не симметричен (у меня 47 женщин и 32 мужчины).
Спасибо за любую помощь !!!
Вы можете видеть из кадра данных, что female_1 имеет «0» в положении [1,1] и male_1 имеет «1 "в позиции [1,1]. И из всех 5 столбцов в обоих наборах данных это единственное, где существует «несоответствие» между этой парой. Таким образом, есть общая ячейка «1», где это женское_1/male_1 попарное сравнение выполняет мое условие. Имеет ли это смысл? – pbc
На самом деле это не «пересечение» в каком-то смысле, а скорее отображение в «пространство продукта». Две функции, которые обеспечивают результаты n-by-m для объектов-матриц, это 'outer' и' kronecker', но для правильной работы они требуют тонкой обработки кода для получения функций, которые обеспечивают результаты с правильными размерами. –
Если я чего-то не хватает, 'ncol (females) - tcrossprod (! Females,! Males) - tcrossprod (as.matrix (females), as.matrix (мужчины))' кажется правильным –