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

Я хочу расширить решение этого поста, где @AnandaMahto дала очень элегантное решение моей проблемы.

Для этой новой функции мне бы хотелось, чтобы, если в одном и том же доме было несколько раз одного и того же вида, будет учитываться только одно наблюдение. Один дом с двумя cats и один rat не создает два наблюдения между cat а также rat но только один (как показано ниже)

В этом примере есть два rats в доме № 4. Как уже говорилось, я не хочу рассматривать два наблюдения между rat а также cat и между spider а также rat но только одно наблюдение между rat а также cat и одно наблюдение между spider а также rat

houses = c(1,1,2,3,4,4,4,4,5,6,5)
animals = c('cat','dog','cat','dog','rat', 'cat', 'spider', 'rat', 'cat', 'cat', 'rat')

Решение @ AnandaMahto вернет это:

        dog rat spider
   cat   1   3      1
   dog       0      0
   rat              2

Но я хотел бы получить это:

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

1 ответ

Решение

Сделать все значения > 0 от table равен "1" перед использованием crossprod:

(table(houses, animals) > 0) *1
#       animals
# houses cat dog rat spider
#      1   1   1   0      0
#      2   1   0   0      0
#      3   0   1   0      0
#      4   1   0   1      1
#      5   1   0   1      0
#      6   1   0   0      0

out <- crossprod((table(houses, animals) > 0) *1)
out[lower.tri(out, diag=TRUE)] <- NA
as.table(out)
#         animals
# animals  cat dog rat spider
#   cat          1   2      1
#   dog              0      0
#   rat                     1
#   spider                   

Чтобы получить желаемый результат, так как мы знаем, что первый столбец и последний ряд будут пустыми, и так как вы уже сами выяснили, что as.table позаботится о том, чтобы не печатать NA Значения, продолжающиеся сверху, можно сделать:

out <- as.table(out[-nrow(out), -1])
out
#        animals
# animals dog rat spider
#     cat   1   2      1
#     dog       0      0
#     rat              1
Другие вопросы по тегам