R将两列减少到表格(交叉制表)

时间:2015-07-17 19:58:26

标签: r crosstab

我认为这样做了,但我无法弄清楚如何。

如果我有一个包含多列的数据框:

  • 学生证,
  • 班级指定人,
  • 中期结果,
  • 结束期限结果

并且中期结果和结束期限结果都有固定数量的选项,例如A,B,C

如何将此缩减为中期与结束期限的3x3矩阵?

即。 20个中期条款导致结束条款15,4,1和B中期条款等等。

1 个答案:

答案 0 :(得分:1)

听起来你正在寻找table功能:

table(dat$Midterm, dat$Endterm)
#     A B C
#   A 3 2 0
#   B 1 2 1
#   C 0 1 0

这里,行是期中成绩,列是期末成绩。您还可以为每个类生成一个表:

lapply(split(dat, dat$Class), function(x) table(x$Midterm, x$Endterm))
# $`1`
#    
#     A B C
#   A 2 1 0
#   B 0 0 1
#   C 0 1 0
# 
# $`2`
#    
#     A B C
#   A 1 1 0
#   B 1 2 0
#   C 0 0 0

数据:

set.seed(144)
(dat <- data.frame(StudentID=sample(1:1000, 10), Class=sample(1:2, 10, replace=TRUE), Midterm=sample(c("A", "B", "C"), 10, replace=TRUE), Endterm=sample(c("A", "B", "C"), 10, replace=TRUE)))
#    StudentID Class Midterm Endterm
# 1         50     2       A       B
# 2        707     1       A       A
# 3        726     2       B       A
# 4        500     1       B       C
# 5        317     1       A       A
# 6        636     1       C       B
# 7         36     2       A       A
# 8        724     2       B       B
# 9         78     2       B       B
# 10       815     1       A       B