我有两个数据集,一个用于学生级数据,另一个用于班级数据。学生和班级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的位置。
答案 0 :(得分:2)
您可以通过从每个id向量创建factors
并将级别更改为数值来执行此操作:
classIDs <- as.factor(classIDs)
levels(classIDs) <- 1:length(levels(classIDs))
这将使用classIDs
值替换每个唯一的numeric
字符串。
编辑:多个表中的ClassID:
根据以下评论,学生表中还有classIDs
。这需要稍微复杂的解决方案。
# 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)
studentIDs
仍然可以使用上面的因子方法替换。