2017-02-27 65 views
1

这与我正在处理的作业问题有关。我需要执行几个矢量的数据操作为一个矩阵,以及使用该combn功能的TA建议:在R中使用combn创建所有可能组合的矩阵

# what I'm starting with 
a = c(1, 2) 
b = c(NA, 4, 5) 
c = c(7, 8) 

# what I need to get 
my_matrix 
a b c 
1 NA 7 
1 NA 8 
1 4 7 
1 4 8 
1 5 7 
1 5 8 
2 NA 7 
2 NA 8 
2 4 7 
2 4 8 
2 5 7 
2 5 8 

my_matrix是与a,b和c中的元素的所有可能组合的矩阵,与列名称a,b和c。我明白combn()在做什么,但不完全确定如何将它转换为上面显示的矩阵?

在此先感谢您的帮助!

+1

'expand.grid(a = a,b = b,c = c)'? –

+0

这几乎就像使用combn的提示只是一个分心。谢谢! – Canovice

+0

提示可能很微妙 - 'combn'帮助文件在其'See also'部分中提到了expand.grid',其描述如下:'*用于从所有因素或向量的组合中创建数据帧。*' – thelatemail

回答

1

expand.grid,在问题的评论中提到,是更好,更简单的方法来做到这一点。但您也可以使用combn

#STEP 1: Get all combinations of elements of 'a', 'b', and 'c' taken 3 at a time 
temp = t(combn(c(a, b, c), 3)) 

# STEP 2: In the first column, only keep values present in 'a' 
#Repeat STEP 2 for second column with 'b', third column with 'c' 
#Use setNames to rename the column names as you want 
ans = setNames(data.frame(temp[temp[,1] %in% a & temp[,2] %in% b & temp[,3] %in% c,]), 
                    nm = c('a','b','c')) 
ans 
# a b c 
#1 1 NA 7 
#2 1 NA 8 
#3 1 4 7 
#4 1 4 8 
#5 1 5 7 
#6 1 5 8 
#7 2 NA 7 
#8 2 NA 8 
#9 2 4 7 
#10 2 4 8 
#11 2 5 7 
#12 2 5 8