2016-02-25 2 views
1

создам простой пример некоторых фиктивных данных:Присвоение уникального идентификационную переменную через повторяющиеся значения

case <- c('a','a','a','b','b','c','c','c','c','d','d','e','e') 
object <- c(1,1,2,1,1,1,1,2,3,1,1,1,2) 

df1 <- data.frame(case, object) 

Теперь для каждого уникального case и object значение, я хочу, чтобы создать соответствующий уникальный числовое значение (идентификатор)

df1$UNIQ_ID <- ........ 

конечный результат должен принимать следующие значения c(1,1,2,3,3,4,4,5,6,7,7,8,9) как при

unique(df1$object[df1$case=='a']) 
unique(df1$object[df1$case=='b']) 

У меня есть хотя использовать dpylr и group_by(case)

+0

Еще одна база R подход будет: 'матч (х <- взаимодействие (DF1 $ случай, df1 $ объекта), уникальный (х)) ' –

ответ

1

Мы можем использовать .GRP из data.table после группировки по «делу» и «объект» на data.table объекта (setDT(df1)).

library(data.table) 
setDT(df1)[,UNIQ_ID:= .GRP ,.(case, object)] 
df1 
#  case object UNIQ_ID 
# 1: a  1  1 
# 2: a  1  1 
# 3: a  2  2 
# 4: b  1  3 
# 5: b  1  3 
# 6: c  1  4 
# 7: c  1  4 
# 8: c  2  5 
# 9: c  3  6 
#10: d  1  7 
#11: d  1  7 
#12: e  1  8 
#13: e  2  9 

base R вариант был бы

grp <- interaction(df1) 
as.numeric(factor(grp, levels= unique(grp))) 
#[1] 1 1 2 3 3 4 4 5 6 7 7 8 9 
+0

Очень просто благодарю. Когда мы дадим 'str (df1)', мы видим, что класс изменился «' 'Classes 'data.table' и 'data.frame'" – user08041991

+0

делает формат 'data.table' имеет другое поведение в' data.frame ' – user08041991

+1

@ user08041991 Если вам нужно изменить его на' data.frame', просто используйте 'setDF (df1)' – akrun

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