factor
변환
midterm <- lapply(midterm,
factor,
levels = 1:4,
labels = c("가", "나", "다", "라"))
str(midterm)
## List of 40
## $ Q1 : Factor w/ 4 levels "가","나","다",..: 4 4 3 4 4 3 4 4 4 4 ...
## $ Q2 : Factor w/ 4 levels "가","나","다",..: 3 4 3 4 4 4 4 4 3 4 ...
## $ Q3 : Factor w/ 4 levels "가","나","다",..: 3 4 4 3 4 4 4 4 4 4 ...
## $ Q4 : Factor w/ 4 levels "가","나","다",..: 2 1 2 1 2 1 2 1 2 1 ...
## $ Q5 : Factor w/ 4 levels "가","나","다",..: 1 1 3 1 1 4 1 1 1 1 ...
## $ Q6 : Factor w/ 4 levels "가","나","다",..: 1 4 4 4 4 2 4 4 4 4 ...
## $ Q7 : Factor w/ 4 levels "가","나","다",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ Q8 : Factor w/ 4 levels "가","나","다",..: 3 4 4 4 4 4 3 4 4 4 ...
## $ Q9 : Factor w/ 4 levels "가","나","다",..: 2 1 2 1 1 1 1 1 2 1 ...
## $ Q10: Factor w/ 4 levels "가","나","다",..: 3 2 4 2 2 1 2 2 3 2 ...
## $ Q11: Factor w/ 4 levels "가","나","다",..: 1 1 4 2 1 4 2 2 2 2 ...
## $ Q12: Factor w/ 4 levels "가","나","다",..: 3 4 3 4 4 4 4 4 2 4 ...
## $ Q13: Factor w/ 4 levels "가","나","다",..: 1 1 1 1 1 2 1 1 3 1 ...
## $ Q14: Factor w/ 4 levels "가","나","다",..: 1 1 1 1 2 1 1 1 2 1 ...
## $ Q15: Factor w/ 4 levels "가","나","다",..: 4 2 2 2 1 4 2 2 2 3 ...
## $ Q16: Factor w/ 4 levels "가","나","다",..: 3 3 2 3 3 3 3 3 2 3 ...
## $ Q17: Factor w/ 4 levels "가","나","다",..: 1 3 3 1 3 3 3 4 1 3 ...
## $ Q18: Factor w/ 4 levels "가","나","다",..: 2 2 3 2 1 2 2 2 2 2 ...
## $ Q19: Factor w/ 4 levels "가","나","다",..: 4 1 4 1 2 3 1 1 4 3 ...
## $ Q20: Factor w/ 4 levels "가","나","다",..: 1 2 1 2 3 3 1 2 1 2 ...
## $ Q21: Factor w/ 4 levels "가","나","다",..: 3 1 1 1 4 1 2 1 1 1 ...
## $ Q22: Factor w/ 4 levels "가","나","다",..: 3 3 4 3 3 3 3 3 1 2 ...
## $ Q23: Factor w/ 4 levels "가","나","다",..: 2 1 1 1 4 3 2 4 3 3 ...
## $ Q24: Factor w/ 4 levels "가","나","다",..: 2 2 1 3 2 2 1 3 2 3 ...
## $ Q25: Factor w/ 4 levels "가","나","다",..: 2 1 3 1 4 4 3 1 2 1 ...
## $ Q26: Factor w/ 4 levels "가","나","다",..: 3 3 2 1 3 3 3 3 3 3 ...
## $ Q27: Factor w/ 4 levels "가","나","다",..: 2 2 2 2 4 2 4 2 4 4 ...
## $ Q28: Factor w/ 4 levels "가","나","다",..: 3 2 3 4 4 2 1 4 4 4 ...
## $ Q29: Factor w/ 4 levels "가","나","다",..: 1 2 3 1 2 2 2 1 1 2 ...
## $ Q30: Factor w/ 4 levels "가","나","다",..: 3 1 4 1 2 1 2 1 1 4 ...
## $ Q31: Factor w/ 4 levels "가","나","다",..: 1 1 4 1 4 4 1 2 4 1 ...
## $ Q32: Factor w/ 4 levels "가","나","다",..: 2 4 2 4 4 2 2 4 1 4 ...
## $ Q33: Factor w/ 4 levels "가","나","다",..: 2 1 3 1 1 4 4 1 3 4 ...
## $ Q34: Factor w/ 4 levels "가","나","다",..: 1 2 2 2 2 1 2 2 2 1 ...
## $ Q35: Factor w/ 4 levels "가","나","다",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ Q36: Factor w/ 4 levels "가","나","다",..: 4 4 2 2 4 2 4 2 2 1 ...
## $ Q37: Factor w/ 4 levels "가","나","다",..: 3 3 3 1 2 3 2 3 3 2 ...
## $ Q38: Factor w/ 4 levels "가","나","다",..: 1 4 1 1 1 2 3 2 3 1 ...
## $ Q39: Factor w/ 4 levels "가","나","다",..: 4 3 3 3 1 2 1 3 4 4 ...
## $ Q40: Factor w/ 4 levels "가","나","다",..: 3 4 3 4 4 3 4 4 3 4 ...
midterm <- data.frame(midterm,
row.names = NULL)
str(midterm)
## 'data.frame': 28 obs. of 40 variables:
## $ Q1 : Factor w/ 4 levels "가","나","다",..: 4 4 3 4 4 3 4 4 4 4 ...
## $ Q2 : Factor w/ 4 levels "가","나","다",..: 3 4 3 4 4 4 4 4 3 4 ...
## $ Q3 : Factor w/ 4 levels "가","나","다",..: 3 4 4 3 4 4 4 4 4 4 ...
## $ Q4 : Factor w/ 4 levels "가","나","다",..: 2 1 2 1 2 1 2 1 2 1 ...
## $ Q5 : Factor w/ 4 levels "가","나","다",..: 1 1 3 1 1 4 1 1 1 1 ...
## $ Q6 : Factor w/ 4 levels "가","나","다",..: 1 4 4 4 4 2 4 4 4 4 ...
## $ Q7 : Factor w/ 4 levels "가","나","다",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ Q8 : Factor w/ 4 levels "가","나","다",..: 3 4 4 4 4 4 3 4 4 4 ...
## $ Q9 : Factor w/ 4 levels "가","나","다",..: 2 1 2 1 1 1 1 1 2 1 ...
## $ Q10: Factor w/ 4 levels "가","나","다",..: 3 2 4 2 2 1 2 2 3 2 ...
## $ Q11: Factor w/ 4 levels "가","나","다",..: 1 1 4 2 1 4 2 2 2 2 ...
## $ Q12: Factor w/ 4 levels "가","나","다",..: 3 4 3 4 4 4 4 4 2 4 ...
## $ Q13: Factor w/ 4 levels "가","나","다",..: 1 1 1 1 1 2 1 1 3 1 ...
## $ Q14: Factor w/ 4 levels "가","나","다",..: 1 1 1 1 2 1 1 1 2 1 ...
## $ Q15: Factor w/ 4 levels "가","나","다",..: 4 2 2 2 1 4 2 2 2 3 ...
## $ Q16: Factor w/ 4 levels "가","나","다",..: 3 3 2 3 3 3 3 3 2 3 ...
## $ Q17: Factor w/ 4 levels "가","나","다",..: 1 3 3 1 3 3 3 4 1 3 ...
## $ Q18: Factor w/ 4 levels "가","나","다",..: 2 2 3 2 1 2 2 2 2 2 ...
## $ Q19: Factor w/ 4 levels "가","나","다",..: 4 1 4 1 2 3 1 1 4 3 ...
## $ Q20: Factor w/ 4 levels "가","나","다",..: 1 2 1 2 3 3 1 2 1 2 ...
## $ Q21: Factor w/ 4 levels "가","나","다",..: 3 1 1 1 4 1 2 1 1 1 ...
## $ Q22: Factor w/ 4 levels "가","나","다",..: 3 3 4 3 3 3 3 3 1 2 ...
## $ Q23: Factor w/ 4 levels "가","나","다",..: 2 1 1 1 4 3 2 4 3 3 ...
## $ Q24: Factor w/ 4 levels "가","나","다",..: 2 2 1 3 2 2 1 3 2 3 ...
## $ Q25: Factor w/ 4 levels "가","나","다",..: 2 1 3 1 4 4 3 1 2 1 ...
## $ Q26: Factor w/ 4 levels "가","나","다",..: 3 3 2 1 3 3 3 3 3 3 ...
## $ Q27: Factor w/ 4 levels "가","나","다",..: 2 2 2 2 4 2 4 2 4 4 ...
## $ Q28: Factor w/ 4 levels "가","나","다",..: 3 2 3 4 4 2 1 4 4 4 ...
## $ Q29: Factor w/ 4 levels "가","나","다",..: 1 2 3 1 2 2 2 1 1 2 ...
## $ Q30: Factor w/ 4 levels "가","나","다",..: 3 1 4 1 2 1 2 1 1 4 ...
## $ Q31: Factor w/ 4 levels "가","나","다",..: 1 1 4 1 4 4 1 2 4 1 ...
## $ Q32: Factor w/ 4 levels "가","나","다",..: 2 4 2 4 4 2 2 4 1 4 ...
## $ Q33: Factor w/ 4 levels "가","나","다",..: 2 1 3 1 1 4 4 1 3 4 ...
## $ Q34: Factor w/ 4 levels "가","나","다",..: 1 2 2 2 2 1 2 2 2 1 ...
## $ Q35: Factor w/ 4 levels "가","나","다",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ Q36: Factor w/ 4 levels "가","나","다",..: 4 4 2 2 4 2 4 2 2 1 ...
## $ Q37: Factor w/ 4 levels "가","나","다",..: 3 3 3 1 2 3 2 3 3 2 ...
## $ Q38: Factor w/ 4 levels "가","나","다",..: 1 4 1 1 1 2 3 2 3 1 ...
## $ Q39: Factor w/ 4 levels "가","나","다",..: 4 3 3 3 1 2 1 3 4 4 ...
## $ Q40: Factor w/ 4 levels "가","나","다",..: 3 4 3 4 4 3 4 4 3 4 ...
barplot
막대그래프로 답안 분포를 시각적으로 살핀다. 차후 나오는 정답률과 함께 어느 문항에서 어느 답안을 많이 고르는지 파악하는 데 활용한다.
# par(family = "Malgun Gothic",
par(mar = c(5.1, 4.1, 4.1, 8.1))
midterm.tbl <- sapply(midterm,
table,
useNA = "no")
kable(midterm.tbl[, 1:20])
가 |
1 |
0 |
0 |
17 |
23 |
1 |
2 |
1 |
22 |
4 |
7 |
0 |
18 |
24 |
1 |
2 |
3 |
4 |
10 |
6 |
나 |
0 |
0 |
0 |
9 |
1 |
2 |
21 |
0 |
4 |
16 |
12 |
2 |
3 |
3 |
23 |
3 |
0 |
22 |
3 |
15 |
다 |
2 |
4 |
6 |
0 |
1 |
0 |
3 |
5 |
1 |
6 |
1 |
3 |
4 |
0 |
1 |
22 |
23 |
1 |
11 |
4 |
라 |
24 |
23 |
21 |
1 |
2 |
24 |
1 |
21 |
0 |
1 |
7 |
22 |
2 |
0 |
2 |
0 |
1 |
0 |
3 |
2 |
kable(midterm.tbl[, 21:40])
가 |
21 |
1 |
8 |
8 |
12 |
8 |
0 |
6 |
13 |
18 |
16 |
1 |
16 |
4 |
1 |
1 |
9 |
10 |
4 |
0 |
나 |
3 |
2 |
7 |
10 |
4 |
1 |
15 |
8 |
11 |
4 |
1 |
11 |
2 |
20 |
25 |
19 |
6 |
10 |
7 |
1 |
다 |
1 |
17 |
5 |
9 |
4 |
16 |
0 |
5 |
1 |
3 |
1 |
1 |
5 |
1 |
0 |
0 |
12 |
4 |
10 |
13 |
라 |
2 |
7 |
7 |
0 |
7 |
2 |
12 |
8 |
2 |
2 |
9 |
14 |
4 |
2 |
1 |
7 |
0 |
3 |
6 |
13 |
str(midterm.tbl)
## int [1:4, 1:40] 1 0 2 24 0 0 4 23 0 0 ...
## - attr(*, "dimnames")=List of 2
## ..$ : chr [1:4] "가" "나" "다" "라"
## ..$ : chr [1:40] "Q1" "Q2" "Q3" "Q4" ...
midterm.ptbl <- round(apply(midterm.tbl,
2,
prop.table) * 100,
digits = 0)
kable(midterm.ptbl[, 1:20])
가 |
4 |
0 |
0 |
63 |
85 |
4 |
7 |
4 |
81 |
15 |
26 |
0 |
67 |
89 |
4 |
7 |
11 |
15 |
37 |
22 |
나 |
0 |
0 |
0 |
33 |
4 |
7 |
78 |
0 |
15 |
59 |
44 |
7 |
11 |
11 |
85 |
11 |
0 |
81 |
11 |
56 |
다 |
7 |
15 |
22 |
0 |
4 |
0 |
11 |
19 |
4 |
22 |
4 |
11 |
15 |
0 |
4 |
81 |
85 |
4 |
41 |
15 |
라 |
89 |
85 |
78 |
4 |
7 |
89 |
4 |
78 |
0 |
4 |
26 |
81 |
7 |
0 |
7 |
0 |
4 |
0 |
11 |
7 |
kable(midterm.ptbl[, 21:40])
가 |
78 |
4 |
30 |
30 |
44 |
30 |
0 |
22 |
48 |
67 |
59 |
4 |
59 |
15 |
4 |
4 |
33 |
37 |
15 |
0 |
나 |
11 |
7 |
26 |
37 |
15 |
4 |
56 |
30 |
41 |
15 |
4 |
41 |
7 |
74 |
93 |
70 |
22 |
37 |
26 |
4 |
다 |
4 |
63 |
19 |
33 |
15 |
59 |
0 |
19 |
4 |
11 |
4 |
4 |
19 |
4 |
0 |
0 |
44 |
15 |
37 |
48 |
라 |
7 |
26 |
26 |
0 |
26 |
7 |
44 |
30 |
7 |
7 |
33 |
52 |
15 |
7 |
4 |
26 |
0 |
11 |
22 |
48 |
str(midterm.ptbl)
## num [1:4, 1:40] 4 0 7 89 0 0 15 85 0 0 ...
## - attr(*, "dimnames")=List of 2
## ..$ : chr [1:4] "가" "나" "다" "라"
## ..$ : chr [1:40] "Q1" "Q2" "Q3" "Q4" ...
label.ptbl <- matrix(paste(format(midterm.ptbl,
digits = 2,
nsmall = 0),
"%",
sep =""),
nrow = 4)
label.ptbl <- ifelse(label.ptbl == " 0%", "", label.ptbl)
label.ptbl[, 1:10]
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] " 4%" " 0%" " 0%" "63%" "85%" " 4%" " 7%" " 4%" "81%" "15%"
## [2,] " 0%" " 0%" " 0%" "33%" " 4%" " 7%" "78%" " 0%" "15%" "59%"
## [3,] " 7%" "15%" "22%" " 0%" " 4%" " 0%" "11%" "19%" " 4%" "22%"
## [4,] "89%" "85%" "78%" " 4%" " 7%" "89%" " 4%" "78%" " 0%" " 4%"
b <- barplot(matrix(midterm.tbl, nrow = 4),
horiz = TRUE,
axes = FALSE,
col = rainbow(4),
names.arg = colnames(midterm.tbl),
las = 1,
xpd = TRUE,
legend.text = rownames(midterm.tbl),
args.legend = list(x = 35, y = 42))
max(b)
## [1] 47.5
midterm.tbl[1, ]
## Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11 Q12 Q13 Q14 Q15 Q16 Q17 Q18 Q19 Q20 Q21 Q22 Q23 Q24 Q25 Q26 Q27 Q28 Q29 Q30 Q31 Q32 Q33 Q34 Q35 Q36 Q37 Q38 Q39 Q40
## 1 0 0 17 23 1 2 1 22 4 7 0 18 24 1 2 3 4 10 6 21 1 8 8 12 8 0 6 13 18 16 1 16 4 1 1 9 10 4 0
text(x = midterm.tbl[1, ] / 2,
y = b,
labels = label.ptbl[1, ])
text(x = midterm.tbl[1, ] + midterm.tbl[2, ] / 2 ,
y = b,
labels = label.ptbl[2, ])
text(x = midterm.tbl[1, ] + midterm.tbl[2, ] + midterm.tbl[3, ] / 2,
y = b,
labels = label.ptbl[3, ])
text(x = midterm.tbl[1, ] + midterm.tbl[2, ] + midterm.tbl[3, ] + midterm.tbl[4, ]/ 2,
y = b,
labels = label.ptbl[4, ])

점수
- 정답 맞춰보기
- 정답 읽어들이기.
what = ""
로 설정하여 char
취급.
(ans <- scan("../data/ans.txt", what = ""))
## [1] "라" "라" "라" "가" "가" "라" "나" "라" "가" "나" "나" "라" "가" "가" "나" "다" "다" "나" "가" "나" "가" "다" "가" "다" "가" "다" "나" "나" "가" "가" "가" "라" "가" "나" "나"
## [36] "나" "가" "나" "다" "나"
- 각 학생들의 답안과 맞춰보기 위하여 정답표 작성.
- 문항별로 정답과 비교하기 위하여 각 문항을 리스트의 원소로 분리
split()
의 기능과 한계에 유의. factor
성격으로부터 1, 10, 11, ..., 2, 20, ..., 3, 4, 5, ... , 9
로 순서를 잡게 되므로 다시 한번 정리할 필요.
(ans.l <- split(ans,
f = paste("A", 1:40, sep = "")))
## $A1
## [1] "라"
##
## $A10
## [1] "나"
##
## $A11
## [1] "나"
##
## $A12
## [1] "라"
##
## $A13
## [1] "가"
##
## $A14
## [1] "가"
##
## $A15
## [1] "나"
##
## $A16
## [1] "다"
##
## $A17
## [1] "다"
##
## $A18
## [1] "나"
##
## $A19
## [1] "가"
##
## $A2
## [1] "라"
##
## $A20
## [1] "나"
##
## $A21
## [1] "가"
##
## $A22
## [1] "다"
##
## $A23
## [1] "가"
##
## $A24
## [1] "다"
##
## $A25
## [1] "가"
##
## $A26
## [1] "다"
##
## $A27
## [1] "나"
##
## $A28
## [1] "나"
##
## $A29
## [1] "가"
##
## $A3
## [1] "라"
##
## $A30
## [1] "가"
##
## $A31
## [1] "가"
##
## $A32
## [1] "라"
##
## $A33
## [1] "가"
##
## $A34
## [1] "나"
##
## $A35
## [1] "나"
##
## $A36
## [1] "나"
##
## $A37
## [1] "가"
##
## $A38
## [1] "나"
##
## $A39
## [1] "다"
##
## $A4
## [1] "가"
##
## $A40
## [1] "나"
##
## $A5
## [1] "가"
##
## $A6
## [1] "라"
##
## $A7
## [1] "나"
##
## $A8
## [1] "라"
##
## $A9
## [1] "가"
(ans.l.2 <- ans.l[paste("A", 1:40, sep = "")])
## $A1
## [1] "라"
##
## $A2
## [1] "라"
##
## $A3
## [1] "라"
##
## $A4
## [1] "가"
##
## $A5
## [1] "가"
##
## $A6
## [1] "라"
##
## $A7
## [1] "나"
##
## $A8
## [1] "라"
##
## $A9
## [1] "가"
##
## $A10
## [1] "나"
##
## $A11
## [1] "나"
##
## $A12
## [1] "라"
##
## $A13
## [1] "가"
##
## $A14
## [1] "가"
##
## $A15
## [1] "나"
##
## $A16
## [1] "다"
##
## $A17
## [1] "다"
##
## $A18
## [1] "나"
##
## $A19
## [1] "가"
##
## $A20
## [1] "나"
##
## $A21
## [1] "가"
##
## $A22
## [1] "다"
##
## $A23
## [1] "가"
##
## $A24
## [1] "다"
##
## $A25
## [1] "가"
##
## $A26
## [1] "다"
##
## $A27
## [1] "나"
##
## $A28
## [1] "나"
##
## $A29
## [1] "가"
##
## $A30
## [1] "가"
##
## $A31
## [1] "가"
##
## $A32
## [1] "라"
##
## $A33
## [1] "가"
##
## $A34
## [1] "나"
##
## $A35
## [1] "나"
##
## $A36
## [1] "나"
##
## $A37
## [1] "가"
##
## $A38
## [1] "나"
##
## $A39
## [1] "다"
##
## $A40
## [1] "나"
정답과 대조하여 R(Right)/W(Wrong) 표시
- 채점표라는 의미의
midterm.marks
로 저장, (# 표시한 방식으로는 작동하지 않음)
# midterm.marks.rw.q1_3 <- mapply(function(x, y) factor(ifelse(x == y, "R", "W")), y = ans.l.2[1:3], midterm[, 1:3])
midterm.marks.rw <- mapply(function(x, y) factor(ifelse(x == y, "R", "W")), y = ans.l.2, midterm)
# midterm.marks.rw <- mapply(function(x, y = ans.l.2) factor(ifelse(x == y, "R", "W")), midterm[, -26])
# midterm.marks.rw <- sapply(midterm, function(x, y = ans.l.2) factor(ifelse(x == y, "R", "W")))
kable(midterm.marks.rw[, 1:20])
R |
W |
W |
W |
R |
W |
R |
W |
W |
W |
W |
W |
R |
R |
W |
R |
W |
R |
W |
W |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
W |
R |
R |
R |
R |
R |
R |
R |
R |
R |
W |
W |
R |
W |
W |
R |
R |
R |
W |
W |
W |
W |
R |
R |
R |
W |
R |
W |
W |
W |
R |
R |
W |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
W |
R |
R |
R |
R |
R |
R |
W |
R |
R |
R |
R |
R |
R |
W |
R |
R |
W |
W |
R |
R |
W |
W |
W |
W |
R |
R |
R |
W |
W |
R |
R |
R |
W |
W |
R |
W |
R |
W |
R |
R |
R |
W |
W |
R |
R |
R |
W |
R |
R |
R |
W |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
W |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
W |
R |
R |
R |
R |
W |
R |
W |
R |
R |
R |
R |
W |
W |
R |
W |
W |
W |
R |
W |
W |
R |
W |
W |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
W |
R |
R |
R |
W |
R |
R |
R |
R |
W |
R |
R |
W |
W |
R |
W |
W |
W |
W |
R |
R |
W |
R |
R |
W |
W |
R |
R |
R |
R |
R |
R |
W |
R |
R |
R |
W |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
W |
R |
R |
R |
W |
R |
R |
R |
R |
R |
R |
R |
R |
R |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
R |
R |
R |
R |
R |
R |
W |
R |
R |
R |
W |
R |
W |
R |
R |
R |
R |
W |
W |
W |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
W |
R |
R |
R |
R |
R |
R |
R |
W |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
W |
R |
R |
R |
W |
W |
R |
R |
R |
R |
W |
W |
R |
R |
R |
R |
R |
R |
R |
R |
W |
W |
R |
R |
W |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
W |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
W |
R |
R |
R |
R |
R |
R |
R |
W |
W |
R |
R |
R |
W |
R |
R |
W |
R |
R |
R |
R |
R |
W |
R |
R |
R |
R |
R |
W |
R |
R |
W |
W |
W |
R |
R |
R |
W |
W |
W |
W |
W |
W |
R |
R |
R |
R |
W |
W |
W |
W |
R |
R |
R |
R |
R |
R |
R |
R |
W |
W |
R |
W |
R |
R |
R |
R |
R |
W |
R |
R |
R |
R |
R |
W |
W |
R |
W |
R |
W |
W |
R |
R |
R |
R |
W |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
W |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
W |
R |
R |
R |
W |
R |
R |
R |
R |
R |
R |
W |
R |
W |
R |
R |
R |
R |
R |
R |
R |
R |
W |
R |
R |
R |
R |
W |
R |
R |
W |
R |
R |
R |
R |
W |
W |
R |
R |
R |
R |
W |
R |
R |
R |
W |
R |
R |
W |
R |
W |
R |
R |
R |
R |
R |
R |
W |
kable(midterm.marks.rw[, 21:40])
W |
R |
W |
W |
W |
R |
R |
W |
R |
W |
R |
W |
W |
W |
R |
W |
W |
W |
W |
W |
R |
R |
R |
W |
R |
R |
R |
R |
W |
R |
R |
R |
R |
R |
R |
W |
W |
W |
R |
W |
R |
W |
R |
W |
W |
W |
R |
W |
W |
W |
W |
W |
W |
R |
R |
R |
W |
W |
R |
W |
R |
R |
R |
R |
R |
W |
R |
W |
R |
R |
R |
R |
R |
R |
R |
R |
R |
W |
R |
W |
W |
R |
W |
W |
W |
R |
W |
W |
W |
W |
W |
R |
R |
R |
R |
W |
W |
W |
W |
W |
R |
R |
W |
W |
W |
R |
R |
R |
W |
R |
W |
W |
W |
W |
R |
R |
W |
R |
W |
W |
W |
R |
W |
W |
W |
R |
W |
W |
W |
W |
R |
W |
W |
R |
R |
W |
W |
W |
W |
W |
R |
R |
W |
R |
R |
R |
R |
W |
R |
R |
W |
R |
R |
R |
R |
R |
W |
R |
R |
W |
R |
W |
W |
W |
W |
R |
W |
W |
R |
R |
W |
W |
W |
R |
R |
R |
W |
W |
W |
W |
R |
W |
W |
R |
R |
R |
W |
W |
W |
W |
R |
R |
W |
W |
R |
W |
W |
W |
W |
W |
W |
R |
W |
W |
W |
W |
W |
W |
W |
W |
W |
W |
W |
R |
R |
W |
W |
R |
W |
W |
R |
W |
W |
R |
W |
R |
R |
W |
R |
W |
R |
R |
R |
R |
R |
R |
W |
R |
W |
W |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
R |
W |
W |
W |
W |
W |
R |
R |
W |
R |
W |
R |
R |
W |
R |
R |
W |
W |
R |
W |
R |
R |
R |
W |
W |
R |
W |
R |
W |
R |
R |
W |
R |
R |
R |
W |
R |
R |
W |
W |
R |
R |
W |
R |
R |
R |
R |
W |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
W |
R |
R |
R |
W |
W |
W |
W |
W |
W |
R |
R |
W |
W |
R |
R |
R |
W |
R |
W |
W |
R |
R |
R |
W |
W |
R |
R |
W |
W |
R |
W |
W |
R |
R |
R |
W |
W |
W |
W |
W |
R |
W |
W |
W |
R |
W |
W |
W |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
W |
W |
R |
W |
W |
R |
R |
R |
W |
W |
R |
W |
R |
W |
R |
R |
R |
R |
R |
W |
W |
W |
W |
W |
W |
W |
W |
R |
R |
W |
R |
R |
R |
W |
W |
R |
R |
R |
R |
W |
W |
W |
R |
R |
W |
R |
R |
R |
R |
R |
R |
R |
W |
W |
R |
R |
R |
R |
W |
W |
R |
W |
R |
R |
W |
W |
W |
W |
W |
R |
W |
W |
W |
R |
W |
W |
W |
R |
W |
W |
R |
W |
R |
R |
R |
R |
R |
W |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
R |
W |
W |
W |
R |
R |
W |
W |
W |
W |
R |
W |
W |
R |
R |
R |
R |
R |
R |
R |
W |
R |
R |
W |
R |
W |
W |
W |
R |
W |
W |
W |
R |
R |
W |
W |
R |
W |
R |
R |
W |
W |
W |
W |
W |
W |
W |
W |
R |
W |
W |
W |
W |
R |
R |
R |
W |
W |
W |
R |
R |
W |
W |
W |
학생별 점수 산출
- 정답을 집계하기 위하여 “R” 갯수를 다시 산출하는
ifelse()
적용.
- 4점씩 곱하면 100점 만점 기준의 점수가 됨.
- 답안지는 작성해서 제출했지만 빈칸이 있는 경우는 그 문항을 0점 처리, 결석의 경우는 점수가 모두 0으로 나오는 경우를 NA처리
midterm.marks <- ifelse(midterm.marks.rw == "R", 1, 0)
kable(midterm.marks[, 1:20])
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
kable(midterm.marks[, 21:40])
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
midterm.score <- midterm.marks * 2.5
kable(data.frame("순번" = 1:nrow(midterm), midterm.score)[1:20])
1 |
2.5 |
0.0 |
0.0 |
0.0 |
2.5 |
0.0 |
2.5 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
2.5 |
2.5 |
0.0 |
2.5 |
0.0 |
2.5 |
0.0 |
2 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
3 |
0.0 |
0.0 |
2.5 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
0.0 |
0.0 |
4 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
0.0 |
0.0 |
2.5 |
2.5 |
0.0 |
0.0 |
6 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
2.5 |
0.0 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
7 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
8 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
9 |
2.5 |
0.0 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
2.5 |
0.0 |
0.0 |
0.0 |
2.5 |
0.0 |
0.0 |
2.5 |
0.0 |
10 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
11 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
0.0 |
0.0 |
2.5 |
0.0 |
0.0 |
0.0 |
0.0 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
0.0 |
12 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
13 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
14 |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
15 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
16 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
17 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
18 |
2.5 |
2.5 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
19 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
20 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
21 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
22 |
2.5 |
0.0 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
23 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
24 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
2.5 |
0.0 |
2.5 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
25 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
26 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
27 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
28 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
0.0 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
# kable(data.frame("학번" = midterm.roll$id, midterm.score)[1:20])
kable(data.frame("순번" = 1:nrow(midterm), midterm.score)[21:40])
0.0 |
0.0 |
2.5 |
0.0 |
0.0 |
0.0 |
2.5 |
2.5 |
0.0 |
2.5 |
0.0 |
2.5 |
0.0 |
0.0 |
0.0 |
2.5 |
0.0 |
0.0 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
0.0 |
2.5 |
0.0 |
2.5 |
0.0 |
2.5 |
0.0 |
0.0 |
0.0 |
2.5 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
0.0 |
0.0 |
2.5 |
0.0 |
0.0 |
0.0 |
2.5 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
2.5 |
2.5 |
0.0 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
0.0 |
0.0 |
0.0 |
0.0 |
2.5 |
2.5 |
0.0 |
2.5 |
0.0 |
0.0 |
0.0 |
2.5 |
0.0 |
0.0 |
0.0 |
2.5 |
0.0 |
0.0 |
0.0 |
0.0 |
2.5 |
0.0 |
0.0 |
2.5 |
2.5 |
0.0 |
0.0 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
0.0 |
2.5 |
0.0 |
0.0 |
0.0 |
0.0 |
2.5 |
0.0 |
0.0 |
2.5 |
2.5 |
0.0 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
0.0 |
2.5 |
2.5 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
0.0 |
0.0 |
2.5 |
2.5 |
0.0 |
0.0 |
2.5 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
2.5 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
2.5 |
2.5 |
0.0 |
0.0 |
2.5 |
0.0 |
2.5 |
2.5 |
0.0 |
0.0 |
2.5 |
0.0 |
2.5 |
2.5 |
0.0 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
NA |
0.0 |
2.5 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
2.5 |
2.5 |
0.0 |
2.5 |
0.0 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
2.5 |
0.0 |
2.5 |
0.0 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
2.5 |
2.5 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
2.5 |
2.5 |
0.0 |
0.0 |
2.5 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
2.5 |
0.0 |
0.0 |
0.0 |
2.5 |
0.0 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
2.5 |
0.0 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
2.5 |
0.0 |
0.0 |
0.0 |
2.5 |
0.0 |
0.0 |
0.0 |
2.5 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
0.0 |
0.0 |
2.5 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
2.5 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
0.0 |
2.5 |
0.0 |
0.0 |
0.0 |
2.5 |
2.5 |
0.0 |
0.0 |
2.5 |
0.0 |
2.5 |
2.5 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
2.5 |
0.0 |
0.0 |
0.0 |
0.0 |
2.5 |
2.5 |
2.5 |
0.0 |
0.0 |
0.0 |
2.5 |
2.5 |
0.0 |
0.0 |
# kable(data.frame("학번" = midterm.roll$id, midterm.score)[21:40])
midterm.score <- apply(midterm.marks, 1, sum, na.rm = TRUE) * 2.5
midterm.score[midterm.score == 0] <- NA
which(midterm.score < 60)
## [1] 1 3 5 6 7 9 11 15 18 22 24 27 28
kable(data.frame("순번" = 1:nrow(midterm), "점수" = midterm.score))
1 |
32.5 |
2 |
82.5 |
3 |
37.5 |
4 |
85.0 |
5 |
47.5 |
6 |
50.0 |
7 |
55.0 |
8 |
85.0 |
9 |
40.0 |
10 |
62.5 |
11 |
35.0 |
12 |
75.0 |
13 |
95.0 |
14 |
NA |
15 |
57.5 |
16 |
75.0 |
17 |
90.0 |
18 |
57.5 |
19 |
67.5 |
20 |
72.5 |
21 |
67.5 |
22 |
42.5 |
23 |
72.5 |
24 |
50.0 |
25 |
87.5 |
26 |
70.0 |
27 |
55.0 |
28 |
52.5 |
문항별 정답률
- 결석한 경우와 일부 문항에 답을 내지 않은 경우를 구분하는 것이 핵심.
midterm.marks
를 그대로 이용하면 쉽게 계산되나, is.na
학습 목적으로 midterm.mark.rw
에서 출발
- 모든 문항에 NA로 답한 결석한 학생들의 인덱스를 먼저 찾아내고,
apply(midterm.marks.rw, 1, function(x) all(is.na(x)))
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
na.all <- which(apply(midterm.marks.rw, 1, function(x) all(is.na(x))))
- 정답률 계산
- NA를 모두 오답처리한 후, 결석한 학생들만 다시 NA로 정정.
- TRUE의 갯수를 합하여 평균.
midterm.marks.2 <- midterm.marks.rw
midterm.marks.2[is.na(midterm.marks.2)] <- "W"
midterm.marks.2[na.all, ] <- NA
midterm.marks.2 <- ifelse(midterm.marks.2 == "R", 1, 0)
rate.by.item <- apply(midterm.marks.2, 2, mean, na.rm = TRUE) * 100
str(rate.by.item)
## Named num [1:40] 88.9 85.2 77.8 63 85.2 ...
## - attr(*, "names")= chr [1:40] "A1" "A2" "A3" "A4" ...
rate.by.item <- as.matrix(rate.by.item, 40)
dimnames(rate.by.item) <- list("문항" = paste("문", 1:40, sep = ""), "정답률" = "정답률")
colnames(rate.by.item) <- "정답률"
kable(rate.by.item, digits = 3)
문1 |
88.889 |
문2 |
85.185 |
문3 |
77.778 |
문4 |
62.963 |
문5 |
85.185 |
문6 |
88.889 |
문7 |
77.778 |
문8 |
77.778 |
문9 |
81.481 |
문10 |
59.259 |
문11 |
44.444 |
문12 |
81.481 |
문13 |
66.667 |
문14 |
88.889 |
문15 |
85.185 |
문16 |
81.481 |
문17 |
85.185 |
문18 |
81.481 |
문19 |
37.037 |
문20 |
55.556 |
문21 |
77.778 |
문22 |
62.963 |
문23 |
29.630 |
문24 |
33.333 |
문25 |
44.444 |
문26 |
59.259 |
문27 |
55.556 |
문28 |
29.630 |
문29 |
48.148 |
문30 |
66.667 |
문31 |
59.259 |
문32 |
51.852 |
문33 |
59.259 |
문34 |
74.074 |
문35 |
92.593 |
문36 |
70.370 |
문37 |
33.333 |
문38 |
37.037 |
문39 |
37.037 |
문40 |
3.704 |
어려운 문제?
정답률 60% 이하
kable(t(rate.by.item[which(rate.by.item <= 60), , drop = FALSE]))
정답률 |
59.25926 |
44.44444 |
37.03704 |
55.55556 |
29.62963 |
33.33333 |
44.44444 |
59.25926 |
55.55556 |
29.62963 |
48.14815 |
59.25926 |
51.85185 |
59.25926 |
33.33333 |
37.03704 |
37.03704 |
3.703704 |
정답률 50% 이하
kable(t(rate.by.item[which(rate.by.item <= 50), , drop = FALSE]))
정답률 |
44.44444 |
37.03704 |
29.62963 |
33.33333 |
44.44444 |
29.62963 |
48.14815 |
33.33333 |
37.03704 |
37.03704 |
3.703704 |
정답률 40% 이하
kable(t(rate.by.item[which(rate.by.item <= 40), , drop = FALSE]))
정답률 |
37.03704 |
29.62963 |
33.33333 |
29.62963 |
33.33333 |
37.03704 |
37.03704 |
3.703704 |
정답률 30% 이하
kable(t(rate.by.item[which(rate.by.item <= 30), , drop = FALSE]))
정답률 |
29.62963 |
29.62963 |
3.703704 |