說,我有一個df:
df <- data.table(user = c('a', 'a', 'b')
); df
user
a
a
b
我希望group_id在以下user級別創建一個新列:
user group_id
a 1
a 1
b 2
有快速/可擴展的方式嗎?我可以通過連接來做到這一點(并且理解data.table連接速度很快)但想知道是否有更簡單、更快的方法。假設我有大約 1e8 行,并且該方法將應用于組中的多個列(在示例中只有 1 ie user)
我已經開始:
df[, step_1 := as.integer(duplicated(df))]; df
user step_1
a 0
a 1
b 0
但不知道下一步是什么,我也不確定這是否是正確的方向。謝謝你。
uj5u.com熱心網友回復:
將用戶轉換為因子。然后將其轉換為整數以提取因子使用的底層代碼。
df[, group_id := as.integer(factor(user))]
df
## user group_id
## 1: a 1
## 2: a 1
## 3: b 2
uj5u.com熱心網友回復:
資料表的rowid()函式也適用于多個分組列
df[, group_id := rowid(user)]
user group_id a 1 a 1 b 2
uj5u.com熱心網友回復:
我們也可以使用 match
df[, group_id := match(user, unique(user))]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/318535.html
