r - 我如何旋转更宽并按两列计算一对的出现?

标签 r igraph

在此处查看数据框

dt <- structure(list(ID = c(1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 4, 5, 5, 
5, 6, 6, 6, 7, 7, 7), V1 = c("ABC", "ABC", "DEF", "GHI", "GHI", 
"GHI", "JKL", "JKL", "DEF", "ABC", "MNO", "GHI", "GHI", "ABC", 
"DEF", "DEF", "GHI", "MNO", "MNO", "ABC"), V2 = c("DEF", "MNO", 
"MNO", "JKL", "DEF", "ABC", "DEF", "ABC", "ABC", "JKL", "JKL",                                                                                               
"ABC", "DEF", "DEF", "GHI", "MNO", "MNO", "ABC", "JKL", "JKL"
)), row.names = c(NA, -20L), class = c("data.table", "data.frame"))
例如在 V1 列中,ABC 出现了 5 次,而在 V2 中,DEF 也出现了 5 次。然而,他们配对了三倍。我想创建一个计数列,无论它们属于哪个列(V1 或 V2),它都会计算它们的对。

最佳答案

更新

dt[, c(2, 3, 1)] %>%
    graph_from_data_frame(directed = FALSE) %>%
    get.adjacency(type = "upper") %>%
    graph_from_adjacency_matrix(weighted = TRUE) %>%
    get.data.frame()
   from  to weight
1   ABC DEF      3
2   ABC GHI      2
3   DEF GHI      3
4   ABC JKL      3
5   DEF JKL      1
6   GHI JKL      1
7   ABC MNO      2
8   DEF MNO      2
9   GHI MNO      1
10  JKL MNO      2

我想你可以试试 igraph选项如下
library(igraph)
get.adjacency(
    graph_from_data_frame(dt[, -"ID"],
        directed = FALSE
    ),
    sparse = FALSE
)
这使
    ABC DEF GHI JKL MNO
ABC   0   3   2   3   2
DEF   3   0   3   1   2
GHI   2   3   0   1   1
JKL   3   1   1   0   2
MNO   2   2   1   2   0

如果要添加指示计数的列,可以尝试
transform(
    dt,
    cnts = ave(ID, pmin(V1, V2), pmax(V1, V2), FUN = length)
)
这使
   ID  V1  V2 cnts
 1:  1 ABC DEF    3
 2:  1 ABC MNO    2
 3:  1 DEF MNO    2
 4:  2 GHI JKL    1
 5:  2 GHI DEF    3
 6:  2 GHI ABC    2
 7:  2 JKL DEF    1
 8:  2 JKL ABC    3
 9:  2 DEF ABC    3
10:  3 ABC JKL    3
11:  4 MNO JKL    2
12:  5 GHI ABC    2
13:  5 GHI DEF    3
14:  5 ABC DEF    3
15:  6 DEF GHI    3
16:  6 DEF MNO    2
17:  6 GHI MNO    1
18:  7 MNO ABC    2
19:  7 MNO JKL    2
20:  7 ABC JKL    3

关于r - 我如何旋转更宽并按两列计算一对的出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68216457/

相关文章:

r - 从 igraph 中的图形中删除未连接的短路径

r - 如何使用 R 中的 igraph 根据长度选择图的某些路径

r - 如何将 igraph 拆分为连通的子图?

networking - R 中的巨型组件

r - Shiny R - 使用循环打印多个图

r - 强制 Shiny 的应用程序在移动设备上显示桌面 View

python - gmailR错误 "Only AF_INET sockets are currently supported on jython"

r - xts::period.apply 和 cumprod

r - Knitr:只有 block 输出是 html(其余部分保持 rmarkdown)

r - 根据边缘属性更改 igraph 图 R 中的边缘厚度