2015-07-20 48 views
0

我有一个练习R,在那里我必须使用乐透数据框,每次从1985年到2011年在La Primitiva中进行绘制。一瞥(数字范围从1到49)。这是号码为赢家组合:如何识别任何具有两个数据帧值的对

n1 n2 n3 n4 n5 n6 
01 19 20 23 34 39 
05 11 22 32 38 48 
................. 
i1<i2<i3<i4<i5<i6 

在练习的要点之一,我有这样的以下问题,涉及到彩票数据:

对于每对(I,J)与I,J∈{1,...,49},我<Ĵ,这样做 如下:

确定m个 IJ吸引他们来说,数字是获奖 组合。

我做了一个矩阵,因为其他替代,与combn,生成一个数据帧有1176行两列,一些笨重。

pairs <- matrix(0, nrow=49, ncol=49) 

矩阵有49行49列。现在我需要识别数据框中的任何([i,],[,j])对(原则上,如果有任何一对数字 - 我们有1,176个组合 - 与我显示的两个赢家组合的数字匹配之前),具有以下条件:[i,] < [,j]。最后,这意味着以下矩阵:http://i.stack.imgur.com/7CBbl.png

在R中这样做的一些有效方法?我掌握了一些想法,但那是不可行的。

谢谢。对于我笨拙的英语感到抱歉。

+0

我在“识别m_ij画”这个问题中被语言弄糊涂了。这是否意味着您要计算每对的抽奖数量,还是您希望保留每对的原始乐透数据的行号? – Gregor

+0

你说'combn'给出了一个data.frame,但是当我使用它时它总是返回一个矩阵...... – Frank

+0

“这是否意味着你要计算每对的绘制次数”。这个,谢谢。 –

回答

0

下面是使用RCPP的溶液中,表现出对随机生成的测试数据:

library('Rcpp'); 
set.seed(1); N <- 2704; winners <- setNames(as.data.frame(t(replicate(N,sort(sample(1:49,6))))),paste0('n',1:6)); 
head(winners); 
## n1 n2 n3 n4 n5 n6 
## 1 10 14 18 27 40 42 
## 2 3 8 10 30 32 47 
## 3 19 23 33 34 37 44 
## 4 6 10 19 30 38 44 
## 5 1 14 15 18 19 40 
## 6 9 24 29 30 38 49 
cppFunction(' 
    IntegerMatrix laprim2(DataFrame winners) { 
     IntegerMatrix counts(49,49); 
     size_t nr = winners.nrows(); 
     IntegerVector n1 = winners[0], n2 = winners[1], n3 = winners[2], n4 = winners[3], n5 = winners[4], n6 = winners[5]; 
     for (size_t i = 1; i < 49; ++i) 
      for (size_t j = i+1; j <= 49; ++j) 
       for (size_t r = 0; r < nr; ++r) 
        if (
         (n1(r) == i || n2(r) == i || n3(r) == i || n4(r) == i || n5(r) == i || n6(r) == i) 
         && (n1(r) == j || n2(r) == j || n3(r) == j || n4(r) == j || n5(r) == j || n6(r) == j) 
        ) ++counts(i-1,j-1); 
     return counts; 
    } 
'); 
laprim2(winners); 
##  [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25] [,26] [,27] [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35] [,36] [,37] [,38] [,39] [,40] [,41] [,42] [,43] [,44] [,45] [,46] [,47] [,48] [,49] 
## [1,] 0 46 31 44 49 31 31 56 25 28 37 39 34 37 36 35 36 25 37 31 40 34 46 44 31 32 36 32 43 31 24 36 43 40 32 36 38 32 40 31 31 41 43 35 31 34 45 23 38 
## [2,] 0 0 30 31 51 31 23 29 16 36 37 40 34 29 33 41 35 37 27 40 37 34 39 39 40 30 31 32 36 28 28 36 31 26 36 27 34 38 39 32 30 36 34 33 38 46 43 28 43 
## [3,] 0 0 0 31 37 25 26 37 20 34 29 39 33 29 38 38 43 22 33 31 32 37 34 35 36 45 35 25 21 28 39 28 28 44 45 23 43 32 34 34 32 42 40 33 31 33 44 29 32 
## [4,] 0 0 0 0 34 46 36 35 44 44 35 40 49 42 27 24 33 31 37 40 37 39 37 48 30 36 34 30 37 26 37 35 38 36 38 29 39 29 31 27 28 34 28 39 29 31 55 29 41 
## [5,] 0 0 0 0 0 31 26 44 27 34 40 34 27 40 38 33 30 22 29 31 30 40 43 37 34 37 31 34 32 26 35 32 44 32 39 28 32 30 44 33 39 35 50 29 39 42 49 41 31 
## [6,] 0 0 0 0 0 0 32 26 35 30 34 40 38 37 30 42 31 35 43 37 26 37 32 34 32 26 23 41 32 38 34 34 36 32 46 32 38 38 36 32 40 28 42 34 36 42 42 27 41 
## [7,] 0 0 0 0 0 0 0 36 29 37 34 32 30 32 28 39 31 35 35 33 26 48 28 31 34 28 41 33 36 27 37 36 33 33 29 25 31 24 32 41 27 30 30 27 37 40 39 22 35 
## [8,] 0 0 0 0 0 0 0 0 32 41 42 25 25 33 40 32 42 26 34 23 38 42 39 45 27 36 33 41 41 31 26 35 44 31 36 36 35 28 36 35 32 31 32 44 26 33 45 44 25 
## [9,] 0 0 0 0 0 0 0 0 0 29 29 32 46 37 30 31 31 32 37 34 31 28 37 43 29 28 30 30 21 29 36 30 28 23 31 32 30 39 29 34 27 34 30 36 23 24 30 24 38 
## [10,] 0 0 0 0 0 0 0 0 0  0 40 31 34 27 35 33 34 31 34 25 30 25 31 38 37 39 33 23 24 24 36 33 30 31 33 28 28 26 23 34 34 39 33 38 37 32 38 29 42 
## [11,] 0 0 0 0 0 0 0 0 0  0  0 42 41 28 40 46 49 33 39 29 35 39 26 35 41 33 29 33 36 24 40 37 28 34 33 25 38 32 41 45 33 38 43 31 31 42 43 40 31 
## [12,] 0 0 0 0 0 0 0 0 0  0  0  0 38 29 35 35 41 34 37 40 34 47 43 42 33 34 31 33 34 33 36 47 36 32 39 32 22 43 36 30 32 35 39 37 41 41 43 31 41 
## [13,] 0 0 0 0 0 0 0 0 0  0  0  0  0 34 37 46 43 26 29 33 36 39 35 44 41 39 35 24 38 43 30 42 30 44 37 40 32 29 36 37 25 36 43 42 43 47 33 32 36 
## [14,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0 30 28 35 36 28 37 35 45 38 33 35 31 39 39 35 25 40 32 30 42 35 36 40 31 32 34 28 35 38 38 30 27 45 34 30 
## [15,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0 24 37 43 48 30 42 40 28 31 30 37 38 32 28 39 30 34 32 41 44 34 36 34 31 30 22 38 47 42 37 39 35 33 32 
## [16,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0 32 26 34 34 31 46 29 37 33 34 29 39 32 33 30 36 35 19 43 28 29 32 39 39 28 40 38 38 35 39 41 26 34 
## [17,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0 39 43 43 36 40 29 38 45 52 25 37 35 37 29 36 47 49 35 33 30 33 43 44 41 32 33 41 36 47 50 37 42 
## [18,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0 38 34 28 42 39 37 37 31 33 29 39 31 33 32 27 33 27 34 34 37 36 34 26 35 34 33 40 43 34 23 29 
## [19,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0 28 26 31 34 35 37 36 32 31 35 33 33 28 37 32 42 25 32 33 38 40 30 35 38 38 38 38 41 25 47 
## [20,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0 23 34 43 30 33 53 30 38 34 34 35 45 28 42 37 27 34 31 35 33 32 28 39 39 45 41 39 24 41 
## [21,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0 27 32 36 33 30 39 31 23 35 29 33 43 40 31 28 43 25 34 30 26 40 46 41 29 32 38 27 31 
## [22,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0 32 36 38 35 33 40 42 40 38 37 34 46 36 30 29 32 35 28 26 27 40 36 33 44 37 30 37 
## [23,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 49 27 41 20 29 37 42 35 39 34 34 37 32 35 29 40 31 29 41 29 47 36 37 37 27 42 
## [24,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 30 36 22 28 35 40 39 38 43 31 34 39 46 40 35 29 35 44 27 38 38 38 38 24 36 
## [25,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 31 36 33 28 26 44 36 28 26 38 28 26 32 31 37 27 31 52 34 33 33 31 30 36 
## [26,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 37 35 27 28 36 34 24 32 40 28 28 34 40 33 26 30 48 31 41 40 43 37 33 
## [27,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 31 28 28 32 31 36 26 25 24 27 29 42 26 30 32 35 39 44 33 31 24 37 
## [28,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 36 26 32 38 33 23 28 36 32 20 36 32 27 28 36 37 31 33 43 33 22 
## [29,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 26 29 37 34 37 28 31 30 25 34 31 29 32 30 37 30 41 32 30 37 
## [30,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 31 37 31 33 29 25 34 25 37 24 25 36 35 30 33 35 38 37 34 
## [31,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 46 27 43 37 35 36 27 46 37 39 22 38 39 35 45 49 31 35 
## [32,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 42 30 41 32 37 29 42 30 24 28 36 38 33 39 32 26 31 
## [33,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 33 34 29 26 32 33 44 41 43 37 45 37 42 29 36 20 
## [34,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 44 27 35 34 33 43 32 36 37 41 44 44 35 30 40 
## [35,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 31 33 37 37 42 37 31 25 39 46 46 42 37 43 
## [36,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 32 26 42 30 25 32 31 29 24 34 32 38 30 
## [37,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 32 37 32 27 32 33 42 36 34 37 31 28 
## [38,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 36 31 22 32 33 35 30 35 31 27 34 
## [39,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 43 24 46 41 43 46 50 37 41 33 
## [40,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 34 38 40 40 37 36 33 35 35 
## [41,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 37 36 30 30 37 41 31 26 
## [42,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 34 38 30 31 39 30 38 
## [43,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 48 33 32 35 30 34 
## [44,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 28 51 30 30 27 
## [45,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 38 41 38 38 
## [46,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 33 37 34 
## [47,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 32 40 
## [48,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 35 
## [49,] 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 

可以执行的个别米一些手动验证IJ值随下列:

laprim2check <- function(i,j) sum(apply(winners,1,function(x) i%in%x&j%in%x)); 
laprim2check(1,2); 
## [1] 46 
+0

非常好的解决方案。谢谢(这是对我的提醒:有一天我必须学习C)。 –

0

这里是另一种方式去做

NewMatrix <- matrix(0,nrow = 49, ncol = 49) 
Winning = matrix(0, nrow = 2, ncol = 100) 
Winning[1,] = sample(1:49,100,replace=TRUE) 
Winning[2,] = sample(1:49,100,replace=TRUE) 
C = 0 
while(C<dim(Winning)[2]) 
{ 
    C = C + 1 
    if(Winning[2,C] <= Winning[1,C]) 
     NewMatrix[Winning[2,C],Winning[1,C]] = NewMatrix[Winning[1,C],Winning[2,C]] + 1 
    if(Winning[1,C] < Winning[2,C]) 
     NewMatrix[Winning[1,C],Winning[2,C]] = NewMatrix[Winning[1,C],Winning[2,C]] + 1 
} 

该示例为1到49之间的代码创建随机数;然后它读取每行中和每列满足的单元格中的每个迭代放置+1。

相关问题