我有可以用两列表示的共现数据。每列中的条目来自同一组可能性。最终,我的目标是绘制一个有向网络,但首先我想将表格分成倒数(即 X->Y 和 Y->X)和仅在一个方向上发生的那些(即只有 Y->Z )。这是一个例子:
library(tidyverse)
# Example data
from <- c("A", "B", "F", "Q", "T", "S", "D", "E", "A", "T", "F")
to <- c("E", "D", "Q", "S", "F", "T", "B", "A", "D", "A", "E")
df <- data_frame(from, to)
df
# A tibble: 11 x 2
from to
<chr> <chr>
1 A E
2 B D
3 F Q
4 Q S
5 T F
6 S T
7 D B
8 E A
9 A D
10 T A
11 F E
这是我想要的输出:
# Desired output 1 - reciprocal co-occurrences
df %>%
slice(c(1,2)) %>%
rename(item1 = from, item2 = to)
# A tibble: 2 x 2
item1 item2
<chr> <chr>
1 A E
2 B D
# Desired output 2 - single occurrences
df %>%
slice(c(3,4,6,6,9,10,11))
# A tibble: 7 x 2
from to
<chr> <chr>
1 F Q
2 Q S
3 S T
4 S T
5 A D
6 T A
7 F E
如果共现是互惠的,则条目的顺序无关紧要,我只需要它们的名称共现不需要知道方向。
这感觉像是一个图问题,所以我试了一下,但我不熟悉使用这种类型的数据,而且大多数教程似乎都涵盖了无向图。查看tidygraph
我理解的igraph
包使用我尝试过的包:
library(tidygraph)
df %>%
as_tbl_graph(directed = TRUE) %>%
activate(edges) %>%
mutate(recip_occur = edge_is_mutual()) %>%
as_tibble() %>%
filter(recip_occur == TRUE)
# A tibble: 4 x 3
from to recip_occur
<int> <int> <lgl>
1 1 8 TRUE
2 2 7 TRUE
3 7 2 TRUE
4 8 1 TRUE
然而,这使边缘与节点分离并重复相互的共现。有没有人有这种数据的经验?