Могу ли я создать уникальную переменную ID с учетом набора данных в столбце? - PullRequest
0 голосов
/ 12 февраля 2019

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

В каждом классе несколько учеников (учеников), но в каждом классе есть уникальный идентификатор.

Целью является замена каждого уникального алфавитно-цифрового идентификатора класса уникальной числовой версией.Мой набор данных содержит около 18000 уникальных идентификаторов классов и более 185000 студентов.

Можно ли это сделать с помощью R?

Например:

df <- data.frame(StuID=c("112", "113", "114", "115", "116", "117"), CLASSID=c("123B542 ", "123B542", "458Z84 ", "458Z84 ", "760E53", "760E53"))

Требуемый вывод

df <-(stuID= c("112", "113", "114", "115", "116", "117"),CLASSID=c("123B542 ", "123B542", "458Z84 ", "458Z84 ", "760E53", "760E53"), NewID= c("12", "12", "13" "13", "14", "14"))

Я не уверен, с чего начать с этим кодом.Я попытался сделать это вручную, но у меня есть набор данных с более чем 18K уникальных ClassID.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Использование только базы R (пакет не требуется):

class_ids <- unique(df$CLASSID)
df$NewID <- match(df$CLASSID, class_ids)
df
  StuID CLASSID NewID
1   112 123B542     1
2   113 123B542     1
3   114  458Z84     2
4   115  458Z84     2
5   116  760E53     3
6   117  760E53     3

Данные

df <- data.frame(
  StuID=c("112", "113", "114", "115", "116", "117"), 
  CLASSID=c("123B542", "123B542", "458Z84", "458Z84", "760E53", "760E53")
)  
0 голосов
/ 12 февраля 2019

Насколько я понимаю, вы хотите, чтобы каждая уникальная группа CLASSID имела соответствующий числовой идентификатор.Поскольку ваша программа принимает только числовые данные, это позволит вам различать классные комнаты.

В вашем примере кода были некоторые несоответствия с пробелами в ваших CLASSID переменных.Например, первый экземпляр 123B542 имеет пробел после него, а второй - нет.Я не знал, было ли это намеренно, и предположил, что вы не хотели размещать там место.Если бы это было преднамеренно (и эти два идентификатора класса предполагаются одинаковыми), я бы очистил пробелы, используя:

df$CLASSID = gsub(" ", "", df$CLASSID)

Для вашего реального вопроса, если вы просто хотите дать произвольное числокаждый CLASSID группируя, вы можете использовать data.table:

setDT(df)[, NewID := .GRP, by = CLASSID]

Это дает следующий вывод:

StuID CLASSID NewID
112 123B542     1
113 123B542     1
114  458Z84     2
115  458Z84     2
116  760E53     3
117  760E53     3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...