1

我有两个数据集,一个用于学生级别的数据,另一个用于班级级别的数据。学生和班级 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.IN 换句话说,我希望拥有如下 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 的位置。

4

1 回答 1

2

您可以通过factors从每个 id 向量创建并将级别更改为数值来做到这一点:

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仍然可以用上面的因子方法代替。

于 2013-09-18T02:32:41.983 回答