微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用igraph查找例外的链式观察

如何解决使用igraph查找例外的链式观察

此问题是先前两个问题的后续内容

How to merge two different groupings if they are not disjoint with dplyr

Assign the same index if two vectors have a common intersection

与这些问题一样,我希望为通过一系列组直接或间接链接的观测值分配相同的索引。例如,假设id1id2

但是现在我想知道我是否可以以某种方式给这个过程增加一点扭曲。我仍然想将这些观察结果联系起来。但是,只有在最终结果遵循两个规则时才会发生匹配:没有id1的匹配被打破,具有相同日期的观测值之间没有配对。

下面我展示了一个具有预期输出的玩具示例:

df <- tribble(~Year,~Quarter,~ id1,~ id2,2009,4,3,2,2010,1,2011,6,7,2012,5,2
              ) 

old_way <- tribble(~Year,~ id3,1
                   )

new_way <- tribble(~Year,1
                   )

考虑old_way,其中日期不起作用。第1行和第2行被分组在一起,因为它们具有相同的id1。第6行和第8行之所以加入它们,是因为它们具有相同的id2。最后,第4行也加入了它们,因为它与第6行具有相同的id1

第3行和第5行由于id1而彼此连接。第7行没有任何交叉点。

转到new_way,列YearQuarter作为某些匹配项的块输入-第2行和第4行不再匹配,因为两者都是2010/2

因此,即使第6行通过id2与第1行和第2行匹配,也不能将它们连接在一起,因为它与第4行具有相同的id1值,第4行与第4行具有相同的日期2。

然后,优先级关系的工作方式如下:不同的日期id1id2

解决方法

我不太清楚您的连接规则,尤其是“新方式”日期的影响,但这是使用igraph的通用方法:

  1. 在数据框中添加唯一的ID(我们称其为vertexId)(代表顶点)
  2. 将边缘数据帧(e)定义为每个id1id2等上的连接并并过滤日期;每个有效对的e data.frame应该分别有vertexIdLeftvertexIdRight
  3. 将图形创建为“ g
  4. 使用连接的组件算法c <- components(g)
  5. 识别相关条目
,

不幸的是,我认为这一次问题是不正确的。至少,它没有唯一的答案。考虑问题中的示例:

第2行连接到第1行,第1行和第2行连接到第6行,第6行连接到第4行。但是,第4行和第2行被禁止共享相同的{{1 }}。问题是您将两个群集之间的另一个“中断”放在哪里。您已经选择将其放在第1,2行和第6行之间的链接上,但是也可以很容易地将其放在第4行和第6行之间,并且仍然满足约束条件。

也许您的意思是keytool -printcert -jarfile app-debug.apk | openssl sha1 -binary | openssl base64 相同的行必须连接在一起,这将迫使中断位于第4行和第6行之间,但是链较长的情况仍然是模棱两可的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。