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

时间:2013-09-18 02:18:04

标签: 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,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的位置。

1 个答案:

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