2014-06-11 18 views
7

Tôi có một cuộc khảo sát trong đó một ID duy nhất phải được chỉ định cho các câu hỏi. Một số câu hỏi xuất hiện nhiều lần. Điều này có nghĩa là có thêm một lớp câu hỏi. Trong dữ liệu mẫu dưới đây chỉ có lớp đầu tiên được bao gồm.Cấp hệ số thứ tự theo thứ tự xuất hiện trong tập dữ liệu

Câu hỏi: làm cách nào để chỉ định một chỉ mục duy nhất theo thứ tự xuất hiện? Giải pháp được cung cấp here hoạt động theo thứ tự abc. Tôi có thể ra lệnh cho các yếu tố, nhưng điều này đánh bại mục đích của việc thực hiện nó trong R [có rất nhiều câu hỏi để sắp xếp].

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

cho:

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

Trả lời

8

Tôi nghĩ rằng data.table cách để làm điều này sẽ

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 cho LukeA nhưng điều này thực sự là nhỏ gọn hơn. Cả hai giải pháp đều hoạt động. – Henk

+0

'idx: = .GRP' là gì? – Superbest

6

Bạn có thể respecify mức yếu tố:

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 
Các vấn đề liên quan