给定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])
}
}