Hen*_*enk 9 r r-factor data.table
我有一项调查,其中必须为问题分配唯一的ID.有些问题多次出现.这意味着还有一层额外的问题.在下面的示例数据中,仅包括第一层.
问题:如何按出现顺序分配唯一索引?此处提供的解决方案按字母顺序排列 我可以订购这些因素,但这会破坏在R中实现它的目的[有很多问题需要排序].
library(data.table)
dt = data.table(question = c("C", "C", "A", "B", "B", "D"),
value = c(10,20,30,40,20,30))
dt[, idx := as.numeric(as.factor(question))]
Run Code Online (Sandbox Code Playgroud)
得到:
question value idx
# 1: C 10 3
# 2: C 20 3
# 3: A 30 1
# 4: B 40 2
# 5: B 20 2
# 6: D 30 4
# but required is:
dt[, idx.required := c(1, 1, 2, 3, 3, 4)]
Run Code Online (Sandbox Code Playgroud)
您可以重新指定因子级别:
dt[, idx := as.numeric(factor(question, levels=unique(question)))]
# question value idx
# 1: C 10 1
# 2: C 20 1
# 3: A 30 2
# 4: B 40 3
# 5: B 20 3
# 6: D 30 4
Run Code Online (Sandbox Code Playgroud)
我认为data.table这样做的方法是
dt[, idx := .GRP, by = question]
## question value idx
## 1: C 10 1
## 2: C 20 1
## 3: A 30 2
## 4: B 40 3
## 5: B 20 3
## 6: D 30 4
Run Code Online (Sandbox Code Playgroud)