根据data.table中的另一列创建一列唯一标识符

时间:2015-03-27 19:05:36

标签: r 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 - esque方式这样做?

修改

您可能想知道我为什么要使用唯一标识符创建唯一标识符。好吧,这里的想法是基本上创建一个哈希。 'Addy'列数据是非常长的字符串,我需要对这些数据进行操作,所以我认为最好在较少的字节数上运行。

2 个答案:

答案 0 :(得分:4)

这应该很快,而且至少要简单一些:

myDT[, mrpID:=.GRP, by=Addy]
myDT
    Addy mrpID
1: 12hig     1
2: 12hig     1
3: 12hig     1
4: 198aM     2
5: 1AbHN     3

答案 1 :(得分:0)

除了data.tablebase factor课程似乎就是您所需要的:

myDT[, mrpID:=as.numeric(as.factor(Addy))]