2016-08-13 3 views
0

прежде всего, извините за это, наверное, глупый вопрос, но я получаю очень разочарованы и отчаявшиеся после 7 часов использования Google и делает след & ошибку ...Создание пары из группы членства данных

У меня есть список идентификаторов пользователей и групп, к которым они принадлежат. Мне нужен список всех комбинаций пользователей, которые разделяют группу (edgelist для создания сетевого графика). Я сразу же нашел 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 пользовательских/групповых записей, которые я разместил выше, и даже это не работает ... что я не вижу здесь? Предел памяти уже установлен на максимальный размер моего компьютера (4 ГБ), и я также сделал все, что предложили справочная функция или любой R-сайт.

R версия 3.3.1, Платформа: x86_64-W64-mingw32/x64

ответ

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)))) 
+0

спасибо так спасибо! ты спас мой день! – phil

Смежные вопросы