r - 过滤表中的定向共现
问题描述
我有可以用两列表示的共现数据。每列中的条目来自同一组可能性。最终,我的目标是绘制一个有向网络,但首先我想将表格分成倒数(即 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
然而,这使边缘与节点分离并重复相互的共现。有没有人有这种数据的经验?
解决方案
尝试这个:
数据:
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)
代码:
recursive_IND <-
1:nrow(df) %>%
sapply(function(x){
if(any((as.character(df[x,]) == t(df[,c(2,1)])) %>% {.[1,] & .[2,]}))
return(T) else return(F)
})
df[recursive_IND,][!(df[recursive_IND,] %>% apply(1,sort) %>% t %>% duplicated(.)),]
df[!recursive_IND,]
结果:
# A tibble: 2 x 2
# from to
# <chr> <chr>
#1 A E
#2 B D
# A tibble: 7 x 2
# from to
# <chr> <chr>
#1 F Q
#2 Q S
#3 T F
#4 S T
#5 A D
#6 T A
#7 F E
推荐阅读
- javascript - 禁用列表和复选框之间的交互
- arrays - Python:在满足条件时查找二维数组中值的行索引
- unity3d - 如何添加事件触发监听器(回调)
- postgresql - PostgreSQL 在 NULL 字段上导入 CSV 失败
- database - Mongodb 在搜索日期范围时在“$lte”(查询或聚合)上有一个错误
- c# - HttpContext 中的 Azure B2C React(前端)+ .net 核心(后端)用户/身份/声明为空
- flutter - InkWell 中的文本应用溢出不工作
- powershell - Powershell 中 MS Word 的范围算术
- java - 使用 JUnit 5 执行远程测试(与 JUnit 4 相比)
- html - 在进度条中使用随机数时出现 Angular ExpressionChangedAfterItHasBeenCheckedError