根据 data.table 中的另一列创建一列唯一标识符
Create a column of unique identifiers based on another column in 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
除了data.table
,base
factor
class 似乎是你需要的:
myDT[, mrpID:=as.numeric(as.factor(Addy))]
如标题所述,我正在尝试在 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
除了data.table
,base
factor
class 似乎是你需要的:
myDT[, mrpID:=as.numeric(as.factor(Addy))]