我有一个大数据集,每个条目有8个属性。
当如图所示将其绘制在图表中时,我会得到一个非常混乱的情节。
因此,我计划计算属性的最佳排列(具有" ... ic"的那些),其中线之间存在最小交叉。我已经通过对属性进行排序来手动尝试,以便"绿色"看起来尽可能线性,但我想知道最小交叉点的解决方案是什么。
所以我提出了一个问题,如果我能以某种方式计算这些交叉点,或者是否有更简单的方法来解决我的问题。 (也许改变规模?但在我的理解中,不应该改变任何东西......)
该图由以下函数生成:
function(oliveareax, oliveareagroups, oliveareacol=regioncol)
{
supline <- trellis.par.get("superpose.line")
suplineold <- supline
supline$col = oliveareacol
trellis.par.set("superpose.line" = supline)
print(parallelplot(oliveareax,
horizontal.axis = FALSE, scales = list(x = list(rot = 90)),
groups = olives$region,
auto.key=TRUE,
) )
trellis.par.set("superpose.line" = suplineold)
rm(suplineold, supline)
}
情节如下:
编辑:我编写了两个函数来计算平均值的交集数,并找出平均值最小交集的排列。后者不起作用(而且效率很低),也许有人可以至少帮助我吗?它给出了&#34; 1 2 2 2 2 2 2 2&#34;,尽管我的实施不可能......findminintersec <- function(set1, set2, set3){
ptm <- proc.time()
idi <- 1:8
mincount <- .Machine$double.max
for(i in 1:8){
idj <- idi[-i]
for(j in idj){
idk <- idj[-j]
for(k in idk){
idl <- idk[-k]
for(l in idl){
idm <- idl[-l]
for(m in idm){
idn <- idm[-m]
for(n in idn){
ido <- idn[-n]
for(o in ido){
idp <- ido[-o]
for(p in idp){
count <- interseccount(set1[c(i,j,k,l,m,n,o,p)], set2[c(i,j,k,l,m,n,o,p)], set3[c(i,j,k,l,m,n,o,p)])
if(count < mincount){
mincount <- count
minperm <- c(i,j,k,l,m,n,o,p)
}
}
idp <- 1:8
}
ido <- 1:8
}
idn <- 1:8
}
idm <- 1:8
}
idl <- 1:8
}
idk <- 1:8
}
idj <- 1:8
}
#return(mincount)
print(proc.time() - ptm)
return(minperm)
}