2014-06-11 3 views
7

У меня есть опрос, в котором уникальным идентификатором должны быть заданы вопросы. Некоторые вопросы появляются несколько раз. Это означает, что есть дополнительный уровень вопросов. В приведенных ниже данных приведены только первый слой.Уровни коэффициента заказа в порядке появления в наборе данных

Вопрос: как я могу присвоить уникальный индекс по порядку внешнего вида? Полученное решение 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 

 Смежные вопросы

  • Нет связанных вопросов^_^