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

标签 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 的方式来做到这一点?

编辑:

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

最佳答案

这应该很快,并且至少更直接一些:

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

关于r - 根据 data.table 中的另一列创建一列唯一标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29308370/

相关文章:

r - 根据 DATE 间隔和 data.table R 中的其他变量有条件地改变新列

r - R 中随机森林图的图例

r - 如何对 data.table 中的多个列进行分组?

r - 比较 R data.table 中多列值的向量

r - 匹配变量后,仅将一个变量从一个 R data.table 复制到另一个

r - 查找组内前一个冬天的事件数

r - 用于按索引对向量进行分区并在该分区上执行操作的惯用 R 代码

c++ - 使用 Rcpp 计算文件序列行数的时间量高于预期

python - 独立 R 脚本加载依赖项的性能

r - 为什么 data.table::B[A] 和 plyr::join(A,B) 返回不同的结果?