正如标题所述,我试图在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‘列数据是非常长的字符串,我需要对这些数据进行操作,所以我认为最好对较少的字节进行操作。
发布于 2015-03-27 19:14:50
这应该是快速的,并且至少更简单一些:
myDT[, mrpID:=.GRP, by=Addy]
myDT
Addy mrpID
1: 12hig 1
2: 12hig 1
3: 12hig 1
4: 198aM 2
5: 1AbHN 3发布于 2015-03-27 19:21:27
除了data.table之外,base factor类似乎是您所需要的:
myDT[, mrpID:=as.numeric(as.factor(Addy))]https://stackoverflow.com/questions/29308370
复制相似问题