Таблица взаимодействий - Дело с домашними животными и домами
У меня есть список домов и список видов животных.
houses = c(1,1,2,3,4,4,4,4,5,6,5)
animals = c('cat','dog','cat','dog','rat', 'cat', 'spider', 'snake', 'cat', 'cat', 'rat')
Я пытаюсь создать функцию, которая возвращает верхнюю треугольную таблицу, которая указывает для каждого домашнего животного, сколько раз было замечено, что он жил в одном доме с другими видами животных. Имеет ли это смысл?
Для приведенного выше примера таблица должна выглядеть следующим образом (надеюсь, что нет ошибок!):
dog rat spider snake
cat 1 2 1 1
dog 0 0 0
rat 1 1
spider 1
Примечание: эта функция должна работать для любых двух векторов одинаковой длины, независимо от того, содержат ли они числа или строку
1 ответ
Решение
Использование table
а также crossprod
:
out <- crossprod(table(houses, animals))
out[lower.tri(out, diag=TRUE)] <- NA
out
# animals
# animals cat dog rat snake spider
# cat NA 1 2 1 1
# dog NA NA 0 0 0
# rat NA NA NA 1 1
# snake NA NA NA NA 1
# spider NA NA NA NA NA
Так как на выходе matrix
Вы можете подавить печать NA
значения непосредственно в print
:
print(out,na.print="")
# animals
# animals cat dog rat snake spider
# cat 1 2 1 1
# dog 0 0 0
# rat 1 1
# snake 1
# spider