从组成员资格数据创建对

时间:2016-08-13 10:03:49

标签: r edges sna

首先,对于这个可能是愚蠢的问题感到抱歉,但是在使用google 7小时并且正在进行跟踪和跟踪之后,我感到非常沮丧和绝望。错误...

我有一个他们所属的用户ID和组列表。我需要一个共享组的所有用户组合的列表(创建网络图的边缘列表)。我立刻找到了this并且非常高兴,因为它正是我所需要的。我之前从未使用过R,但它似乎很容易解决我的问题。另一个线程中提供的代码完全可以正常工作,但是在我根据需要自定义它以及特别是我的数据输入后,我遇到了问题:

#import a csv, the column "group" consists of groupID, column "user" the userID
group <- read.csv("E:/r/input.csv")[ ,c('group')]
user <- read.csv("E:/r/input.csv")[ ,c('user')]
data.frame(group,user)

R中的输出给了我:

       group       user
1  596230112 1514748421
2  596230112 1529087841
3  596230112 1518194516
4  596230112 1514852264
5  596230112 1514748421
6  596230112 1511768387
7  596230112 1514748421
8  596230112 1514852264
9  596230112 1511768387
10 596231111 1535990615
11 596232665 1536087573
12 596232665 1488758238
13 596232665 1536087573
14 596234505 1511768387
15 596234505 1535990615

到目前为止,真好!下一步应该对用户进行配对,例如

1512748421 -> 1529097841
1512748421 -> 1518194516 

依旧......我使用的代码是:

#create pairs
pairs <- do.call(rbind, sapply(split(user, group), function(x) t(combn(x,2))))

我得到的错误是:

Error : cannot allocate vector of size 5.7 Gb
In addition: Warning messages:
1: In combn(x, 2) :
  Reached total allocation of 3981Mb: see help(memory.size)
2: In combn(x, 2) :
  Reached total allocation of 3981Mb: see help(memory.size)
3: In combn(x, 2) :
  Reached total allocation of 3981Mb: see help(memory.size)
4: In combn(x, 2) :
  Reached total allocation of 3981Mb: see help(memory.size)

我最终想要使用的数据集非常大,但是一开始我试着让我在上面发布的那15个用户/组条目甚至不起作用......我不知道什么看到这里?内存限制已经设置为我的计算机的最大值(4GB),我也做了帮助功能或任何R网站建议的所有内容。

R版本3.3.1,平台:x86_64-w64-mingw32 / x64

1 个答案:

答案 0 :(得分:0)

问题是

combn(x,2)

x是一个整数时,combn会创建序列1 ... x并返回该序列中的所有对,如果x很大,则该对将是一个巨大的数组。如果您有任何组中包含单个用户,则会发生这种情况。

解决方案是过滤掉只有一个用户的所有组:

#create pairs
pairs <- do.call(rbind, sapply(Filter(function(x)
    length(x) > 1, split(user, group)), function(x) t(combn(x,2))))