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

时间:2014-06-11 07:56:46

标签: r data.table r-factor

我有一项调查,其中必须为问题分配唯一ID。有些问题多次出现。这意味着还有一层额外的问题。在下面的示例数据中,仅包括第一层。

问题:如何按照出现顺序分配唯一索引?提供的解决方案here按字母顺序排列。我可以订购这些因素,但这会破坏在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))]

给出:

  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)]

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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