首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中查找重复模式

在R中查找重复模式
EN

Stack Overflow用户
提问于 2011-01-07 00:52:56
回答 1查看 2.5K关注 0票数 1

假设我有一个5 x 100的矩阵,其中的数字介于0和100之间,例如:

代码语言:javascript
复制
1   5   10  15  3
2   15  3   8   27
1   22  34  45  35
28  27  32  3   8
......

我想找出重复的数字“模式”(主要是情侣或三胞胎)。

所以在我的例子中,情侣3,15出现两次,三元组3,8,27也出现两次(我不关心顺序)。

你将如何在R中实现它?

我想要分开的情侣和三胞胎,并计算他们的数量。

谢谢你,尼科

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-07 01:40:28

这里有一种方法。对于100行矩阵的每一行,找到所有数字对/三元组(使用combn ),并对数字对/三元组进行频率计数(使用table)。我定义的pasteSort函数在对向量进行排序后从向量中创建一个字符串。我们将此函数应用于每行中的每个对/元组,并在进行频率计数之前从矩阵中收集所有对/元组。请注意,如果一对在同一行上重复,则将其计为“重复”。

代码语言:javascript
复制
> mtx <- matrix( c(1,5,10,15,3, 
                 2, 15, 3, 8, 27, 
                 1, 22, 34, 45, 35, 
                  28, 27, 32, 3, 8), ncol=5, byrow=TRUE)
> pasteSort <- function( x ) do.call(paste, as.list( sort( x) ) )
> pairs <- c( apply(mtx, 1, function(row) apply( combn(row, 2), 2, pasteSort)) )
> pairFreqs <- table(pairs)
> pairFreqs[ pairFreqs > 1 ]
3 15 3 27  3 8 8 27 
   2    2    2    2 
> triples <- c( apply(mtx, 1, function(row) apply( combn(row, 3), 2, pasteSort)) )
> tripleFreqs <- table( triples )
> tripleFreqs[ tripleFreqs > 1 ]
3 8 27 
     2 
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4617407

复制
相关文章

相似问题

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