我有一项调查,其中必须为问题分配唯一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)]
答案 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