Tabla de interacciones - Maleta con mascotas y casas.

Tengo una lista de casas y una lista de especies animales.

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')

Estoy tratando de crear una función que devuelva una tabla triangular superior que indique para cada mascota, la cantidad de veces que se observó que vivía en la misma casa que las otras especies animales. ¿Tiene sentido?

Para el ejemplo anterior, la tabla debe tener este aspecto (¡espero que no haya ningún error!):

    dog   rat   spider   snake
cat  1     2      1        1      
dog        0      0        0
rat               1        1
spider                     1

Nota: esta función debería funcionar para cualquiera de los dos vectores de la misma longitud, independientemente de si contienen números o cadenas

Respuestas a la pregunta(1)

Su respuesta a la pregunta