开发者

Finding repeated patterns in R

开发者 https://www.devze.com 2023-02-03 09:17 出处:网络
Say I have a matrix of 5 x 100 of numbers between 0 and 100 for instance: 1开发者_如何学C 510153

Say I have a matrix of 5 x 100 of numbers between 0 and 100 for instance:

1  开发者_如何学C 5   10  15  3
2   15  3   8   27
1   22  34  45  35
28  27  32  3   8
......

I would like to find repeated "patterns" of numbers (mainly couples or triplets).

So in my example I would have the couple 3,15 appearing twice and the triplet 3, 8, 27 also appearing twice (I don't care about the order).

How would you implement that in R?

I would like to have couples and triplets separately and have their count.

thanks nico


Here is one way. For each row of your 100-row matrix, you find all pairs/triples of numbers (using combn ) and do a frequency-count (using table) of the pairs/triples. The pasteSort function I defined creates a string out of a vector after sorting it. We apply this function to each pair/tuple in each row, and collect all pairs/tuples from the matrix before doing the frequency-count. Note that if a pair repeats on the same row, it's counted as a "repeat".

> 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 
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号