我目前正在做一个项目,可视化智库董事会成员及其各自董事会的网络.我掌握的数据格式如下:

     name edge
1    A    1
2    A    2
3    A    3
4    B    4
5    B    5
6    C    6

然而,为了使其与igraphs graph_from_data_frame()功能兼容,我需要以下格式:

   name from to
1    A    1  2
2    A    1  3
3    A    2  3
4    B    4  5
5    C    6  0

我已经试过了

 df1 <- setDT(df1)[, list(edge = toString(edge)), name]
 df1 <- separate(df1, "edge", c("X", "Y", "Z"))

顺从的

  name X    Y    Z
1:    A 1    2    3
2:    B 4    5 <NA>
3:    C 6 <NA> <NA>

然而,我不知道如何从这个(或初始格式)到使用graph_from_data_frame()的所需格式

推荐答案

你可以使用combn by每个名字和一个小案件处理.

by(dat, dat$name, \(x) {
  e <- x$edge
  if (length(e) == 1L) e <- c(e, 0L)
  cbind(x$name[1L], t(combn(e, 2L)))
}) |> 
  do.call(what=rbind.data.frame) |>
  setNames(c('name', 'from', 'to'))
#     name from to
# A.1    A    1  2
# A.2    A    1  3
# A.3    A    2  3
# B      B    4  5
# C      C    6  0

Note: R >= 4.1 used.


Data:

dat <- structure(list(name = c("A", "A", "A", "B", "B", "C"), edge = 1:6), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6"))

R相关问答推荐

从gtsummary包中使用tBL_strata()和tBL_summary()时删除变量标签

带有叠加饼图系列的Highmap

基于不同组的列的相关性

R Highcharts与两个位置关联的注释

将非重复序列高效转换为长格式

在ggplot2中更改小提琴情节的顺序

有效识别长载体中的高/低命中

Geom_arcbar()中出错:找不到函数";geom_arcbar";

防止在更新SHINY中的Reactive Value的部分内容时触发依赖事件

多元正态分布的计算

避免在图例中显示VLINS组

数据集上的R循环和存储模型系数

如何在刻面和翻转堆叠条形图中对齐geom_text()

在GT()中的列之间添加空格

conditionPanel不考虑以下条件

把代码写成dplyr中的group_by/摘要更简洁吗?

根据用户输入更改标记大小和 colored颜色 (R)

带有Bootswatch Cerulean主题的shiny 仪表板中的浏览&按钮可见性问题

动态统计函数在ShinyApp内部更改

如何在一个GGPLATE中绘制多个灰度平滑?