这是我的数据框:
Run Code Online (Sandbox Code Playgroud)V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 3 1 1 1 -1 -1 -1 -1 1 1 1 1 -1 -1 -1 -1 4 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 5 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 6 1 -1 -1 1 1 -1 -1 -1 -1 1 1 -1 -1 1 1 7 1 -1 -1 -1 -1 1 1 1 1 -1 -1 -1 -1 1 1 8 1 -1 -1 -1 -1 1 1 -1 -1 1 1 1 1 -1 -1 9 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 10 -1 1 -1 1 -1 1 -1 -1 1 -1 1 -1 1 -1 1 11 -1 1 -1 -1 1 -1 1 1 -1 1 -1 -1 1 -1 1 12 -1 1 -1 -1 1 -1 1 -1 1 -1 1 1 -1 1 -1 13 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 14 -1 -1 1 1 -1 -1 1 -1 1 1 -1 -1 1 1 -1 15 -1 -1 1 -1 1 1 -1 1 -1 -1 1 -1 1 1 -1 16 -1 -1 1 -1 1 1 -1 -1 1 1 -1 1 -1 -1 1
首先,我combn(4:15, 3)用来计算组合.
像这样:
Run Code Online (Sandbox Code Playgroud)[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] .... [,220] [1,] 4 4 4 4 4 4 4 4 4 4 4 4 4 .... 13 [2,] 5 5 5 5 5 5 5 5 5 5 6 6 6 .... 14 [3,] 6 7 8 9 10 11 12 13 14 15 7 8 9 .... 15
我的问题是:如何使用combn(4:15, 3)和我的数据集的结果来获得大量的矩阵?(在这种情况下,我需要220个矩阵,因为有220种组合.)
以第一个组合为例,第一个组合是:
[,1]
[1,] 4
[2,] 5
[3,] 6
Run Code Online (Sandbox Code Playgroud)
所以我从数据框中选择第4列,第5列和第6列,得到一个像这样的新矩阵:
V4 V5 V6
1 1 1 1
2 1 1 1
3 1 -1 -1
4 1 -1 -1
5 -1 1 1
6 -1 1 1
7 -1 -1 -1
8 -1 -1 -1
9 -1 1 -1
10 -1 1 -1
11 -1 -1 1
12 -1 -1 1
13 1 1 -1
14 1 1 -1
15 1 -1 1
16 1 -1 1
Run Code Online (Sandbox Code Playgroud)
有没有人有一些简单的代码来做到这一点?感谢大家的帮助!
combn 有一个函数参数,所以你可以简单地做:
output <- combn(4:15, 3, FUN = function(x) mydf[x], simplify = FALSE)
Run Code Online (Sandbox Code Playgroud)
这产生list的data.frame第 这是第一个:
output[[1]]
# V4 V5 V6
# 1 1 1 1
# 2 1 1 1
# 3 -1 -1 -1
# 4 -1 -1 -1
# 5 1 1 -1
# 6 1 1 -1
# 7 -1 -1 1
# 8 -1 -1 1
# 9 1 -1 1
# 10 1 -1 1
# 11 -1 1 -1
# 12 -1 1 -1
# 13 1 -1 -1
# 14 1 -1 -1
# 15 -1 1 1
# 16 -1 1 1
Run Code Online (Sandbox Code Playgroud)
而第220届:
output[[220]]
# V13 V14 V15
# 1 1 1 1
# 2 -1 -1 -1
# 3 -1 -1 -1
# 4 1 1 1
# 5 1 -1 -1
# 6 -1 1 1
# 7 -1 1 1
# 8 1 -1 -1
# 9 -1 1 -1
# 10 1 -1 1
# 11 1 -1 1
# 12 -1 1 -1
# 13 -1 -1 1
# 14 1 1 -1
# 15 1 1 -1
# 16 -1 -1 1
Run Code Online (Sandbox Code Playgroud)
为了比较,这里是combn它自己:
> temp <- combn(4:15, 3)
> ncol(temp)
[1] 220
> temp[, 1]
[1] 4 5 6
> temp[, 220]
[1] 13 14 15
Run Code Online (Sandbox Code Playgroud)