我有一组包含字母和数字的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。
答案 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