我试图使用以下代码来提供一组变量的独特组合表。
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
有人可以帮我解决这个问题吗?
答案 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))