Вот подход с использованием базовых команд R. R по умолчанию создает факторы из векторов символов. Важно, чтобы вы этого не допустили. Включение аргумента as.is=TRUE
в ваши команды read.csv
сохранит символьные данные. Сначала сделайте данные легко доступными:
myAlist <- list(A_1 = c("tomato", "zucchini", "potato", "banana", "coconut",
"salt"), A_2 = c("tomato", "zucchini", "potato"), A_3 = c("zucchini",
"potato"))
myTlist <- list(T_1 = c("tomato", "zucchini", "potato", "banana", "coconut",
"salt"), T_2 = c("tomato", "zucchini", "potato", "banana"), T_3 = c("potato",
"banana", "coconut"))
Теперь мы создадим функцию для поиска пересечения двух групп и вычисления количества общих элементов:
Shared <- function(a, t) {
length(intersect(myAlist[[a]], myTlist[[t]]))
}
Мы берем каждую группу в A и сравнивая его с каждой группой в B, например, A1 с B1, B2, B3 и т. д. c:
(A <- rep(1:3, each=3))
# [1] 1 1 1 2 2 2 3 3 3
(T <- rep(1:3, 3))
# [1] 1 2 3 1 2 3 1 2 3
Наконец, мы вычисляем количество общих элементов:
nshare <- mapply(Shared, A, T)
myTbl <- matrix(nshare, 3, byrow=TRUE, dimnames=list(A=names(myAlist), T=names(myTlist)))
myTbl
# T
# A T_1 T_2 T_3
# A_1 6 4 3
# A_2 3 3 1
# A_3 2 2 1