如何在R中将标签关系转换为邻接表?

时间:2019-04-14 15:08:43

标签: r

给定ID和标签的数据框,我想创建ID的邻接表。我的数据如下:

   Id                 Tag
1   1                data
2   4                  c#
3   4            winforms
4   4     type-conversion
5   4             decimal
6   4             opacity
7   6                html
8   6                 css
9   6                css3
10  6 internet-explorer-7
11  8                  c#
12  8     code-generation
13  8                  j#
14  8            visualj#
15  9                  c#
16  9                .net
17  9            datetime
18 11                  c#

我想将其转换为邻接表,这意味着我想为共享标签的每个组合创建ID对。例如ID 4、8、9和11的标签为c#,因此我希望我的结果矢量包含(4、8),(4、9),(4、11),(8、9),(8、11) ,(9,11)。

如果我用任何其他语言进行操作,我将遍历每行,为每个Tag创建一个映射到ID列表的映射-然后将给定列表中的每个ID配对。我尝试将列表矩阵创建为伪字典,但是鉴于我的数据集的大小,生成任何结果都花费了很长时间。据我了解,我应该避免R中的循环并进行一些矢量工作,但我不知道从哪里开始。

这是我可能会破坏而从未终止的R脚本,用于创建伪字典:

tagMap <- matrix(list(), nrow=1, ncol=2)
for (i in 1:nrow(question_tags)) {
  found <- -1
  for (j in 1:nrow(tagMap)) {
    if (!is.null(tagMap[[j,1]]) && tagMap[[j,1]] == question_tags[i, 2]) {
      found = j
    }
  }
  if (j != -1) {
    tagMap[[j,2]] <- c(tagMap[j,], question_tags[i, 1])
  } else {
    tagMap[[nrow, 1]] <- c(tagMap, question_tags[i, 2])
    tagMap[[nrow, 2]] <- c(question_tags[i, 1])
  }
}

0 个答案:

没有答案