11

我有一份房屋清单和一份动物物种清单。

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

注意:这个函数应该适用于任何两个相同长度的向量,不管它们是否包含数字或字符串

4

1 回答 1

16

使用tablecrossprod

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

由于输出是 a您可以直接在中matrix抑制值的打印:NAprint

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                         
于 2013-11-10T15:14:24.143 回答