[R] 내 답과 정답 비교하여 점수 계산하기(벡터(vector) 다루기 예제)

r-vector-manipulation

해당 포스트에서는 R에서 벡터(vecotr) 연산을 통해 문제와 정답이 있을 때 점수를 계산하는 방법을 설명합니다.

1. INTRO

네이버 지식iN에서 지식을 공유하고 있습니다. 간단한 질문들은 해당 질문에 바로 답변을 드리지만 질문의 내용이 유익하거나 추가 설명이 필요한 경우에는 포스팅을 작성하여 공유드리고 있습니다.

2. 질문

r-vector-manipulation
▲ 네이버 지식인 질문

3. 풀이

이번 문제에서는 R에서 벡터 연산 방법에 대해 다룹니다. 문제에서는 3개의 벡터(point,answer,mark)가 주어지며, 내가 작성한 답(mark)과 정답(answer)을 비교하여 배점(point)을 기준으로 점수를 계산합니다.

결과를 도출해야 하는 문제는 총 3문제이며, 해당 풀이에서는 벡터 비교를 통해 참값(TRUE)에 해당하는 값들을 추출하고 합(sum)을 구하는 방법을 설명합니다.


  1. 맞힌 문제의 개수는 몇 개인가?
  2. 점수는 몇 점인가?
  3. 9점 이상 11점 이하의 배점을 모두 10점으로 변경할 때 점수는 몇 점인가?


먼저 문제 풀이에 사용할 데이터(vector)를 생성하겠습니다. 각 벡터는 길이가 3이며, 숫자들만 들어있습니다.

  • point : 배점
  • answer : 정답
  • mark : 내가 제시한 답
point <- c(8, 9, 11)
answer <- c(2, 3, 2)
mark <- c(2, 3, 1)

1) 맞힌 문제의 개수는 몇 개인가?

해당 문제는 두 벡터(answer, mark)의 비교 연산을 통해 계산할 수 있습니다. 먼저 answer == mark 연산을 통해 두 벡터의 동일값을 찾고(값이 동일한 경우 TRUE, 다르면 FALSE), sum() 함수로 합산하게 되면 TRUE의 개수가 구해집니다.

참고 : 논리값 TRUE, FALSE의 수치 연산
논리값(boolean)인 TRUE, FALSE는 산술 계산이 가능하며, TRUE는 1, FALSE는 0으로 치환되어 계산됩니다.

answer == mark
[1]  TRUE  TRUE FALSE
sum(answer == mark)
[1] 2

2) 점수는 몇 점인가?

해당 문제에서는 위에서 사용한 answer == mark 결과값(index)을 이용하여 point에서 TRUE에 해당하는 값들을 찾고 합산(sum())해 주면 됩니다.

sum(point[answer == mark])
[1] 17

3) 9점 이상 11점 이하의 배점을 모두 10점으로 변경할 때 점수는 몇 점인가?

해당 문제에서는 두 가지 풀이법을 설명합니다.

  1. 데이터 직접 수정이 가능한 경우
  2. 조건식을 이용하여 값 치환을 해야하는 경우


먼저, 아래와 같이 직접적으로 데이터 수정이 가능한 경우, point 변수의 9점 이상 11점 이하의 값들을 10으로 변경한 newpoint 변수를 생성하여 계산합니다.

newpoint <- c(8, 10, 10)
sum(newpoint[answer == mark])
[1] 18


두번째 방법은 조건식을 이용하여 풀이하는 방법입니다. 아래 코드에서 첫번째 줄은 point 변수에서 값이 9이상 이면서 11이하인 값들을 10으로 변경해주며, 두번째 줄은 변경된 point변수에서 정답의 점수를 계산합니다.

point[point >= 9 & point <= 11] <- 10
sum(point[answer == mark])
[1] 18

4. 마무리

이번 포스트에서는 R에서 벡터(vector)를 다루는 예제를 설명하였습니다. 벡터는 R에서 가장 기본이 되는 자료 구조로 가장 많이 사용되므로 위와 같은 예제들을 다양하게 학습해 보시는 것이 좋습니다.

5. 관련 링크

[1] 네이버 지식인
[2] [R] 평균보다 큰 몸무게를 갖는 사람 수 세기
[3] [R] 5의 배수 벡터 생성 및 추출
[4] [R] 벡터 생성 연습 (수열, 텍스트 조합)


banner-request-analysis