Как указано в заголовке, я пытаюсь создать столбец в data.table
, который будет действовать как уникальный идентификатор другого столбца. Мой набор данных в нескольких сотнях миллионов наблюдений, но вот установить игру и код, который я работал до сих пор:Создайте столбец уникальных идентификаторов на основе другого столбца в data.table
# I use a key because there are many more columns, but they are irrelevant here
myDT <- data.table(Addy=c("12hig", "12hig", "12hig", "1AbHN", "198aM"),key="Addy")
Addy
1: 12hig
2: 12hig
3: 12hig
4: 198aM
5: 1AbHN
uniqueDT <- unique(myDT[,list(Addy)]) # is this inefficient?
uniqueDT[,mrpId := seq(1,nrow(uniqueDT),1)]
Addy mrpId
1: 12hig 1
2: 198aM 2
3: 1AbHN 3
myDT[J(uniqueDT)]
Addy mrpId
1: 12hig 1
2: 12hig 1
3: 12hig 1
4: 198aM 2
5: 1AbHN 3
Моего код выше выполняет свою работу, но я не знаю, если он эффективен , Есть ли еще data.table
-образный способ сделать это?
Edit:
Вы можете быть удивлены, почему я создаю уникальные идентификаторы из уникальных идентификаторов. Ну, идея здесь состоит в том, чтобы создать хэш. Данные столбца «Addy» - очень длинные строки, и мне нужно делать операции над этими данными, поэтому я думаю, что лучше работать с меньшим количеством байтов.
Как ваш больше вопрос, если вы установите 'Addy' в качестве своего ключа (что, вероятно, вам стоит), я немного скептически отношусь к тому, что вы получите много, если вы ускорите его, используя альтернативный столбец, содержащий ту же самую информацию группировки. Мое сильное предположение (но это всего лишь догадка) заключается в том, что за кулисами - содержат ли они очень короткие или очень длинные строки - любые две столбцы с ключом используют один и тот же механизм для id, подмножество и работают с подгруппами данных. Таблица. –
Интересно, я буду помнить об этом. На данный момент, однако, после нескольких операций в R данные экспортируются в другие программы, которые не так эффективны для памяти, как 'data.table'. – mrp
@frank Yea, окончательное редактирование Matt Dowle охватывает это. Однако я искал этот вопрос и не нашел этот вопрос, или этот: http://stackoverflow.com/questions/28910376/is-there-a-way-in-data-table-to-assign-ids- by-group-based-on-identifier? lq = 1 – mrp