Как я могу изменить нумерацию в столбце с R

У меня есть таблица со столбцом

X <- c(6,6,6,10,10,26,26,26,26,26,80)

Итак, в X у нас есть 4 уникальных числа.

Как я могу изменить нумерацию для каждого значения? Например: 6,6,6 на первом месте, поэтому приравняйте их к 1; 10,10 стоят на втором месте, делаем их равными 2 и так далее.


person user45415631    schedule 20.07.2014    source источник
comment
Поскольку на мой вопрос не было ответа здесь, я пошел дальше и удалил тег data.table из некоторых ваших вопросов, где я не вижу вообще никакой релевантности. Не могли бы вы не загрязнять теги? Спасибо.   -  person Arun    schedule 21.07.2014


Ответы (2)


Это даст немного другой ответ, чем ответ Ричарда, если уникальные элементы не будут отсортированы:

X <- c(6,6,6,10,10,26,26,26,26,26,80)
as.numeric(factor(X) )
 [1] 1 1 1 2 2 3 3 3 3 3 4

Сравнивать:

> X <- c(80, 6,6,6,10,10,26,26,26,26,26)
> as.numeric(factor(X))
 [1] 4 1 1 1 2 2 3 3 3 3 3
> match(X, unique(X))
 [1] 1 2 2 2 3 3 4 4 4 4 4
person IRTFM    schedule 20.07.2014
comment
@DavidArenburg, это было бы трудно определить, поскольку в ОП не упоминалась сортировка, а только позиция. match(x, unique(x)) соответствует позициям независимо от того, о чем они, похоже, просили. - person Rich Scriven; 21.07.2014
comment
@RichardScriven, я ничего не имею против вашего ответа, это действительно очень хорошее решение, но в программировании действует правило, что побеждает код более общего назначения. - person David Arenburg; 21.07.2014
comment
... прикосновение ..... хе-хе. Странно, я даже не заметил этого изменения, так как почти одновременно был принят еще один мой ответ. - person Rich Scriven; 21.07.2014

Это можно сделать с помощью match

> X <- c(6,6,6,10,10,26,26,26,26,26,80)
> match(X, unique(X))
# [1] 1 1 1 2 2 3 3 3 3 3 4
person Rich Scriven    schedule 20.07.2014
comment
Спасибо! У меня есть еще один вектор, очень похожий на X: y ‹- c(4,4,4,15,15,40,40,40,40,40,90) И мне нужно заменить столбец X на вектор Y. - person user45415631; 20.07.2014
comment
Хорошо, просто попробуй data$X <- y - person Rich Scriven; 21.07.2014