首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相互作用表-与宠物和家庭的案例2

相互作用表-与宠物和家庭的案例2
EN

Stack Overflow用户
提问于 2013-11-13 17:25:12
回答 1查看 73关注 0票数 0

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

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

在这个例子中,第4宫有两个rats,正如前面所说的,我不想考虑ratcat之间以及spiderrat之间的两个观察,而只考虑ratcat之间的一个观察,以及spiderrat之间的一个观察。

代码语言:javascript
复制
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的解决方案将返回以下内容:

代码语言:javascript
复制
        dog rat spider
   cat   1   3      1
   dog       0      0
   rat              2

但我想得到这个:

代码语言:javascript
复制
        dog rat spider
   cat   1   2      1
   dog       0      0
   rat              1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-13 17:30:51

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

代码语言:javascript
复制
(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值的问题,因此可以这样做:

代码语言:javascript
复制
out <- as.table(out[-nrow(out), -1])
out
#        animals
# animals dog rat spider
#     cat   1   2      1
#     dog       0      0
#     rat              1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19960367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档