4

我有一个包含 3 个对象(A、B、C)的数据框,这些对象具有以下关系分数:

relationships<-data.frame(object.1=c("A","A","B"),object.2=c("B","C","C"),relationship=1:3)

relationships

  object.1 object.2 relationship
1        A        B            1
2        A        C            2
3        B        C            3

考虑 A、B、C 的所有可能排列以及相邻对象之间的关系分数,即

A   1   B   3   C   = 4
A   2   C   3   B   = 5
C   2   A   1   B   = 3
B   1   A   2   C   = 3
B   3   C   2   A   = 5
C   3   B   1   A   = 4

我需要确定对对象进行排序的对象的顺序,以便相邻对象的关系从左到右尽可能高,即对于上面的示例,我将选择

B   3   C   2   A   = 5

有什么建议我应该怎么做?谢谢。

4

2 回答 2

1

这是否接近您正在寻找的内容?

library(data.table)
relationships<-data.table(object.1=c("A","A","B"),object.2=c("B","C","C"),relationship=1:3)
relationships<-rbindlist(list(relationships,relationships[,list(object.1=object.2, object.2=object.1, relationship)]))
setkey(relationships,object.1,object.2)

perm<-CJ(C1=LETTERS[1:3],C2=LETTERS[1:3],C3=LETTERS[1:3])[!C1==C2 & !C1==C3 & !C2==C3]
setkey(perm,C1,C2)
perm[relationships,rel.1:=relationship]
setkey(perm,C2,C3)
perm[relationships,rel.2:=relationship]
perm[order(-rel.1,-rel.2)]

它不是很可扩展,但也许可以扩展......

于 2013-02-26T04:16:40.527 回答
0

它似乎是图形问题中的最短路径(即最长,但这没关系) - 尝试使用igraph将您的输入视为真实图形,然后用于shortest.paths找到最佳连接,最后选择实现您的递减关系的这个最佳标准。(这是次优解决方案,但最佳解决方案可能需要用 C 或类似的东西编写)。

于 2012-09-17T13:52:21.540 回答