2011-01-06 51 views
1

查找重複的模式說我有例如0和100之間的5×100個號碼的矩陣:中的R

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中實現?

我想分開夫婦和三胞胎,並有他們的數量。

感謝 尼科

回答

3

這是一種方式。對於100行矩陣的每一行,可以找到所有數字的對/三元組(使用combn),並執行對/三元組的頻率計數(使用table)。我定義的pasteSort函數在對它進行排序後從矢量創建一個字符串。我們將這個函數應用到每一行中的每個pair/tuple,並且在進行頻率計數之前收集矩陣中的所有對/元組。請注意,如果一個對在相同的行上重複,則它被視爲「重複」。

> 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

`combn`!這就是我想念的!今晚我會試試這個,我會告訴你它是否有效! (PS:數字不能在同一行重複,所以這不是問題)。 – nico 2011-01-06 18:14:17