交互表 - 宠物和房屋的情况2

时间:2013-11-13 17:25:13

标签: r combinations interaction

我想扩展这个post的解决方案,其中@AnandaMahto为我的问题提供了一个非常优雅的解决方案。

对于这个新功能,我希望如果在同一个房子里有多次相同的物种,那么它只计算一次观察。一个有两个cats和一个rat的房子不能在catrat之间创建两个观察值,但只有一个(如下所示)

在此示例中,门牌号码4中有两个rats。如上所述,我不想考虑ratcat之间以及{{1}之间的两个观察}和spiderratrat之间只有一次观察,catspider之间只有一次观察

rat

@ AnandaMahto的解决方案将返回:

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

但我想得到这个:

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

1 个答案:

答案 0 :(得分:2)

在使用> 0之前,将table中的所有值crossprod等于“1”:

(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会照不打印{{1从上面继续,你可以这样做:

NA