使用R在多级分析中将字符串ID转换为数字

使用R在多级分析中将字符串ID转换为数字,r,data-structures,multi-level,R,Data Structures,Multi Level,我有两个数据集,一个用于学生级数据,另一个用于班级级数据。学生和班级级别ID生成为字符串值,如: 学生数据集: 学生ID->141PSDM2L、1420CHY1L、1JNLV36HH、1MNSBXUST、2K7EVS7X6、2N2SC26HL、 类别ID->XK37HDN,XK37HDN,XK37HDN,3K3EH77,3K3EH77,2K36HN6,… 类级数据集: 类别ID->XK37HDN,3K3EH77,2K36HN6,3K3LHSH,3K3LHSY,DK3EH14,DK3EH1H,DK

我有两个数据集,一个用于学生级数据,另一个用于班级级数据。学生和班级级别ID生成为字符串值,如:

学生数据集:

学生ID->
141PSDM2L、1420CHY1L、1JNLV36HH、1MNSBXUST、2K7EVS7X6、2N2SC26HL、

类别ID->
XK37HDN,XK37HDN,XK37HDN,3K3EH77,3K3EH77,2K36HN6,…

类级数据集:

类别ID->
XK37HDN,3K3EH77,2K36HN6,3K3LHSH,3K3LHSY,DK3EH14,DK3EH1H,DK3EH1K,…

在学生数据集中,每个班级ID的重复次数等于班级中的学生人数,但在班级级数据集中,每个班级只有一个代码

如何将这些ID转换为整数?考虑到学生和班级级别的ID。换句话说,我希望ID如下(或类似内容):

学生数据集:

学生ID->
1,2,3,4,5,6,…

类ID->
1,1,1,2,2,3,…

类级数据集:

类ID->
1,2,3,4,5,6,7,8,…


学生级数据的转换并不困难。当我想要转换类级数据时,问题就出现了。由于类ID在学生数据集中重复,类ID取1到1533之间的值,但在类级别数据中使用相同的转换方法会产生1到896之间的值,因此我不知道,例如,学生级别数据中的类ID为45,在类级别数据集中的位置为类ID 45。

您可以通过从每个ID向量创建
因子,并将级别更改为数值来实现这一点:

classIDs <- as.factor(classIDs)
levels(classIDs) <- 1:length(levels(classIDs))

studentId
仍然可以用上述因子方法替换

这很有用,但我遇到了另一个问题,这是在回应Frank的帖子时描述的。学生和班级共享一个ID意味着什么?我指的是学生级数据集中的ClassID,它们在学生级数据中复制。
# Some assumptions on variable names:
# classes: The data.frame with all of the class data. Has classIDs as a column.
# students: The data.frame with the student-class pairings. Has both classIDs and 
#           studentIDs as a column

# First we get a list of all unique classes:
allClasses <- unique(c(unique(classes$classIDs), unique(students$classIDs)))

# Now a named vector mapping classes to numeric values:
numMap <- 1:length(allClasses)
names(numMap) <- allClasses

# Now we can use numMap to reassign numeric values
classes$classIDs <- numMap[classes$classIDs]
students$classIDs <- numMap[students$classIDs]

# clean up
rm(allClasses)