Search code examples
rlayoutdataframeprobabilitydice

Reorganise 2x36 dataframe to a 6x6 dataframe. Dice throw visualisation


I've created a data-frame of all the possible outcomes from a dice throw as 2x36 dataframe.

    d1  d2
1   1   1
2   2   1
3   3   1
4   4   1
5   5   1
6   6   1
7   1   2
8   2   2
9   3   2
10  4   2
11  5   2
12  6   2
13  1   3
14  2   3
15  3   3
16  4   3
17  5   3
18  6   3
19  1   4
20  2   4
21  3   4
22  4   4
23  5   4
24  6   4
25  1   5
26  2   5
27  3   5
28  4   5
29  5   5
30  6   5
31  1   6
32  2   6
33  3   6
34  4   6
35  5   6
36  6   6

To make this visually more pleasing I want to re-organise it as a 6x6 table.

   [,1]  [,2]  [,3]  [,4]  [,5]  [,6] 
[1,] "1 1" "1 2" "1 3" "1 4" "1 5" "1 6"
[2,] "2 1" "2 2" "2 3" "2 4" "2 5" "2 6"
[3,] "3 1" "3 2" "3 3" "3 4" "3 5" "3 6"
[4,] "4 1" "4 2" "4 3" "4 4" "4 5" "4 6"
[5,] "5 1" "5 2" "5 3" "5 4" "5 5" "5 6"
[6,] "6 1" "6 2" "6 3" "6 4" "6 5" "6 6"

How would I achieve this?


Solution

  • Here is a base R alternative using lapply and apply

    out =  do.call(rbind,
                    lapply(split(data, data$d2),function(x) 
                    apply(x, 1, function(y) paste(y['d2'], y['d1'], collapse = ' '))
                   )
    #>out                
    #     1     2     3     4     5     6    
    #1 "1 1" "1 2" "1 3" "1 4" "1 5" "1 6"
    #2 "2 1" "2 2" "2 3" "2 4" "2 5" "2 6"
    #3 "3 1" "3 2" "3 3" "3 4" "3 5" "3 6"
    #4 "4 1" "4 2" "4 3" "4 4" "4 5" "4 6"
    #5 "5 1" "5 2" "5 3" "5 4" "5 5" "5 6"
    #6 "6 1" "6 2" "6 3" "6 4" "6 5" "6 6"