Таблица взаимодействий - Дело с домашними животными и домами

У меня есть список домов и список видов животных.

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                         
Другие вопросы по тегам