2014-06-11 19 views
7

Ich habe eine Umfrage, in der eine eindeutige ID Fragen zugewiesen werden muss. Einige Fragen erscheinen mehrmals. Dies bedeutet, dass es eine zusätzliche Ebene von Fragen gibt. In den folgenden Beispieldaten ist nur die erste Ebene enthalten.Reihenfolge Faktor Ebenen in der Reihenfolge des Auftretens in Datensatz

Frage: Wie ordne ich einen eindeutigen Index in der Reihenfolge des Aussehens zu? Die gelieferte Lösung here funktioniert alphabetisch. Ich kann die Faktoren ordnen, aber das vereitelt den Zweck, es in R zu tun [es gibt viele Fragen zu sortieren].

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

gibt:

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

Antwort

8

Ich denke, die data.table Weg, dies

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 für Lukea sein zu tun aber das ist in der Tat kompakter. Beide Lösungen funktionieren. – Henk

+0

Was ist 'idx: = .GRP'? – Superbest

6

Sie könnten die Faktorstufen neu angeben:

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 
Verwandte Themen