我有一个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},i <1。 j,做到这一点 以下内容:
确定m ij 抽取两个数字都在获胜中 组合
我制作了一个矩阵,因为另一个选项是 combn ,会产生一个包含1176行和两列的数据帧,这是一种笨重的东西。
pairs <- matrix(0, nrow=49, ncol=49)
矩阵有49行和49列。现在我需要在数据帧中识别任何([i,],[,j])对(原则上,我寻找任何一对数字 - 我们有1,176个组合 - 与我展示的两个赢家组合数匹配之前),具有以下条件:[i,]&lt; [,j]的。最后,这意味着以下矩阵:http://i.stack.imgur.com/7CBbl.png
在R中这样做的一些有效方法?我抓住了一些想法,但这在时间上是不可行的。
感谢。抱歉我笨重的英语。
答案 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
您可以使用以下方法对单个m ij 值进行一些手动验证:
laprim2check <- function(i,j) sum(apply(winners,1,function(x) i%in%x&j%in%x));
laprim2check(1,2);
## [1] 46
答案 1 :(得分: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。