【问题标题】:Make an edge list from data [closed]从数据制作边缘列表[关闭]
【发布时间】:2017-04-15 12:06:15
【问题描述】:

我有一个庞大的数据,这张图片显示了我的一些数据样本:

我想制作一个边缘列表。如果column1=column2=column3=column4=column6的行值相同,则第5列的行值之间存在关系(边缘),结果应该如下图所示:

有没有办法做到这一点? postgressSQL 或 Python 或 R 可以为我做这些吗?

【问题讨论】:

    标签: python postgresql graph


    【解决方案1】:

    如果我理解正确,你想要一个自我加入:

    select t1.col5 as vertex_1, t2.col5 as vertex_2
    from t t1 join
         t t2
         on t1.col1 = t2.col1 and t1.col2 = t2.col2 and t1.col3 = t2.col3 and
            t1.col4 = t2.col4 and t1.col6 = t2.col6 and
            t1.col5 <> t2.col5;
    

    我不知道你想要无向边还是有向边。如果是无向的,则将最后一个条件更改为:t1.col5 &lt; t2.col5

    【讨论】:

    • 戈登·林诺夫 很好用。只是你能解释一下写 t1.col5 的原因吗
    • @NeginZarbakhsh 。 . .当两行匹配时,如果您只希望输出中的一对(A-->B),则使用&lt;。如果你想要两者(A-->B 和 B-->A),那么使用&lt;&gt;
    【解决方案2】:

    您想要的是结果列表中的独特元素。看看 SQL 关键词“unique”/“distinct”,大概可以用来生成唯一行。

    【讨论】:

    • @Ray 我不想生成唯一的行。正如您在图片中看到的,第 5 列中某些行的值相等,但这些相等值的行在第 4 列中是不同的。我想找到一种方法,首先将这些相等的行分开,然后在第 5 列之间形成一条边。正如您在第二张图片中看到的,前 6 行在 5 列中具有相同的值,但它们在第 5 列中的值不同。然后他们之间应该有一个边缘,比如结果图片
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 2016-01-22
    相关资源
    最近更新 更多