我已经创建了一个数据框,其中包含骰子投掷的所有可能结果,为2x36数据帧。
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
为了使视觉效果更令人满意,我想将其重新组织为6x6表格。
[,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"
我将如何实现这一目标?
答案 0 :(得分:2)
我们可以paste
列,并使用matrix
指定维度
matrix(do.call(paste, df1), ncol=6)
# [,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"
如果只有两列,我们也可以paste
分别对列进行分组
matrix(paste(df1[,1], df1[,2]), ncol = 6)
如果您需要dcast/acast
方法,请通过paste
'df1'列创建另一列,然后执行acast
。
library(reshape2)
acast(data.frame(df1, value=do.call(paste, df1), stringsAsFactors=FALSE), ar~br)
# 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"
或使用spread
tidyr
的类似选项
library(dplyr)
library(tidyr)
df1 %>%
mutate(value= paste(ar, br)) %>%
spread(br, value)
但是,可以使用outer
outer(1:6, 1:6, FUN= paste)
df1 <- expand.grid(ar=1:6, br=1:6)
答案 1 :(得分:2)
以下是使用lapply
和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"