2014-06-11 66 views
7

我有一項調查,其中必須爲問題分配唯一的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)] 

回答

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 
+0

+1 LukeA但這確實更緊湊。兩種解決方案都可以工 – Henk

+0

什麼是'idx:= .GRP'? – Superbest

6

你可以respecify因子水平:

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