Вы действительно не хотите использовать матрицу для этого. Фрейм данных позволяет вам иметь комбинацию типов данных.
clasIDs <- c("Firsthour", "Secondhour", "Thirdhour")
class.size <-c(3, 5, 2) # small sizes for illustration
cls.frame <- data.frame(clasID=rep(clasIDs, class.size),
student.ID = unlist(sapply(class.size, function(x) seq(from=1, to=x))),
grade=factor(rep(NA,10) , levels=c("100-90", "89-80", "79-70")) )
> cls.frame
clasID student.ID grade
1 Firsthour 1 <NA>
2 Firsthour 2 <NA>
3 Firsthour 3 <NA>
4 Secondhour 1 <NA>
5 Secondhour 2 <NA>
6 Secondhour 3 <NA>
7 Secondhour 4 <NA>
8 Secondhour 5 <NA>
9 Thirdhour 1 <NA>
10 Thirdhour 2 <NA>