【问题标题】:Table of interactions - case with pets and houses 2互动表 - 宠物和房屋案例 2
【发布时间】:2013-11-13 17:25:12
【问题描述】:

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

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

在这个例子中,4 号房子有两个rats。如前所述,我不想考虑ratcat 之间以及spiderrat 之间的两个观察值,但只有在ratcat 之间进行一项观察,在spiderrat 之间进行一项观察

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

【问题讨论】:

    标签: r combinations interaction


    【解决方案1】:

    在使用crossprod 之前,使table 中的所有值> 0 等于“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 会注意不打印 NA 值,从上面继续,你可以这样做:

    out <- as.table(out[-nrow(out), -1])
    out
    #        animals
    # animals dog rat spider
    #     cat   1   2      1
    #     dog       0      0
    #     rat              1
    

    【讨论】:

    • 非常感谢,再来一次!
    猜你喜欢
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 2019-06-06
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多