2014-06-11 5 views
7

में उपस्थिति के क्रम में ऑर्डर कारक स्तर मेरे पास एक सर्वेक्षण है जिसमें प्रश्नों के लिए एक अद्वितीय आईडी असाइन की जानी चाहिए। कुछ प्रश्न कई बार प्रकट होते हैं। इसका मतलब है कि प्रश्नों की एक अतिरिक्त परत है। नीचे नमूना डेटा में केवल पहली परत शामिल है।डेटा सेट

प्रश्न: मैं उपस्थिति के क्रम में एक अद्वितीय सूचकांक कैसे आवंटित करूं? समाधान प्रदान किया गया समाधान here वर्णानुक्रम में काम करता है। मैं कारकों को आदेश दे सकता हूं, लेकिन यह आर में ऐसा करने के उद्देश्य को हरा देता है [सॉर्ट करने के लिए कई प्रश्न हैं]।

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

LukeA के लिए +1 किया जाएगा लेकिन यह वास्तव में अधिक कॉम्पैक्ट है। दोनों समाधान काम करते हैं। – 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 
संबंधित मुद्दे