假设我有一个5 x 100的矩阵,其中的数字介于0和100之间,例如:
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中实现它?
我想要分开的情侣和三胞胎,并计算他们的数量。
谢谢你,尼科
发布于 2011-01-07 01:40:28
这里有一种方法。对于100行矩阵的每一行,找到所有数字对/三元组(使用combn ),并对数字对/三元组进行频率计数(使用table)。我定义的pasteSort函数在对向量进行排序后从向量中创建一个字符串。我们将此函数应用于每行中的每个对/元组,并在进行频率计数之前从矩阵中收集所有对/元组。请注意,如果一对在同一行上重复,则将其计为“重复”。
> 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 https://stackoverflow.com/questions/4617407
复制相似问题