按数据集中出现的顺序排列因子级别

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)

luk*_*keA 8

您可以重新指定因子级别:

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)


Dav*_*urg 8

我认为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)