所有变量的独特组合

时间:2014-12-03 06:20:10

标签: r unique combinations

我试图使用以下代码来提供一组变量的独特组合表。

V1=as.vector(CRmarch30[1])
V2=as.vector(CRmarch30[2])
V3=as.vector(CRmarch30[3])
V4=as.vector(CRmarch30[4])
V5=as.vector(CRmarch30[5])
V6=as.vector(CRmarch30[6])
V7=as.vector(CRmarch30[7])

正如您可能已经猜到的那样,CRmarch30是一个包含7列的数据框。我将每列转换为矢量。然后,我使用以下代码创建7个变量的所有唯一组合:

combo=expand.grid(V1,V2,V3,V4,V5,V6,V7)
combo

我没有收到输出,而是收到以下错误消息:

 Warning message:
In format.data.frame(x, digits = digits, na.encode = FALSE) :
  corrupt data frame: columns will be truncated or padded with NAs

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

as.vector未将其转换为vector例如:

V1=as.vector(CRmarch30[1])
V2=as.vector(CRmarch30[2])
 V3=as.vector(CRmarch30[3])

expand.grid(V1, V2, V3)
#  Var1 Var2 Var3
#1    1    5    0
#Warning message:
#In format.data.frame(x, digits = digits, na.encode = FALSE) :
# corrupt data frame: columns will be truncated or padded with NAs

 is.vector(V1)
 #[1] FALSE
 is.data.frame(CRmarch30[1])
 #[1] TRUE

你可以做到

 V1 <- CRmarch30[,1]
 is.vector(V1)
 #[1] TRUE

但是,您不需要创建vector个对象。这可以通过(如果您需要unique组合)

来完成
 do.call(expand.grid,lapply(CRmarch30,unique))

或者如果列已经是unique

 do.call(expand.grid, CRmarch30)

或使用data.table

 library(data.table)
 setDT(CRmarch30)[,do.call(CJ, lapply(.SD, unique))]

数据

set.seed(22)
CRmarch30 <- as.data.frame(matrix(sample(c(NA,0:5), 10*3,
                                    replace=TRUE), ncol=3))