Назначение уникальной переменной из data.frame

Это похоже на этот вопрос, но мои выходные результаты отличаются.

Возьмите данные:

example <- data.frame(var1 = c(2,3,3,2,4,5), 
                  var2 = c(2,3,5,4,2,5), 
                  var3 = c(3,3,4,3,4,5))

Теперь я хочу создать example$Identity которые принимают значение от 1:x для каждого уникального значения var1

я использовал

example$Identity <- apply(example[,1], 2, function(x)(unique(x)))

Но я не знаком с правильным форматированием function()

Выход из example$Identity должно быть 1,2,2,1,3,4

2 ответа

Решение

Это:

example$Identity <- as.numeric(as.factor(example$var1))

даст вам желаемый результат:

> example$Identity
[1] 1 2 2 1 3 4

Заворачивая as.factor в as.numeric он начинает считать уровни факторов с 1 и так далее.

Или вы можете использовать match

example$Identity <- with(example, match(var1, unique(var1)))

Если значения отсортированы как в векторе, findInterval также может быть использован

findInterval(example$var1, unique(example$var1))
#[1] 1 2 2 1 3 4
Другие вопросы по тегам