给定列中的一组数据,是否可以创建唯一的ID变量?

时间:2019-02-11 22:42:39

标签: r id

我有一组包含字母和数字的id变量。我想为这些变量生成唯一的数字ID,因为我正在使用的程序仅接受数字数据。

每个教室有多个案例(学生),但是每个教室都有唯一的ID。

目标是用唯一的数字版本替换每个唯一的字母数字类ID。我的数据集包含大约18000个唯一的班级ID,超过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 :(得分:0)

据我了解,您希望每个唯一的CLASSID组都具有一个相应的数字ID。由于您的程序仅接受数字数据,因此可以区分教室。

在您的示例代码中,CLASSID变量中的间距存在一些不一致之处。例如,123B542的第一个实例后面有一个空格,而第二个则没有。我不知道那是否是故意的,并假定您不是要在那儿放空间。如果这是故意的(并且假定这两个类ID相同),我将使用以下命令清理空间:

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

答案 1 :(得分:0)

仅使用基数R(不需要软件包):

.First()

数据

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