자격증/ADsP

ADsP R 문제 풀이법, 코드 읽는 법만 정리

공감(공부하는감자) 2026. 6. 20. 18:13

안녕하세요, 공부하는 감자입니다 🥔

ADsP 3과목의 R 문제 때문에 R 설치부터 하려는 분들이 있는데, 그럴 필요까지는 없어요.

ADsP는 R 코드를 짜는 시험이 아니라, 보고 결과를 맞히는 시험입니다.

그래서 공부 방향도 "작성 연습"이 아니라 "읽기 연습"이어야 합니다. 코드를 한 줄씩 따라가면서 머릿속으로 실행할 수 있으면 끝이에요.

비전공자가 매회 1~2문제씩 흘리는 지점이 벡터 인덱싱결측치(NA) 처리 두 곳이라, 이 글은 그 부분을 중심으로 시험에 나오는 것만 추렸습니다.

제일 먼저: R 인덱스는 1부터

파이썬을 조금이라도 본 분들이 가장 많이 틀리는 포인트 두 개부터요.

  • R의 인덱스는 0이 아니라 1부터 시작합니다
  • 음수 인덱스는 "뒤에서부터"가 아니라 "그 위치를 제외" 라는 뜻입니다
v <- c(10, 20, 30, 40, 50)

v[1]       # 10 (첫 번째)
v[2:4]     # 20 30 40
v[-1]      # 20 30 40 50 (첫 번째 제외)
v[c(2,5)]  # 20 50
v[v > 25]  # 30 40 50 (조건 인덱싱)

벡터는 R의 가장 기본 자료구조이고 모든 원소가 같은 타입이어야 해요. 생성 함수는 세 개만 기억하면 됩니다.

c(10, 20, 30)        # 직접 나열
seq(2, 10, by = 2)   # 2 4 6 8 10
rep(7, times = 3)    # 7 7 7

1:8처럼 콜론으로 연속 수열을 만드는 표현도 자주 나와요.

NA 처리 — 매회 나오는 단골

결측치 문제의 핵심은 한 문장입니다.

NA가 섞인 채로 통계 함수를 돌리면 결과도 NA다.

0이 아니라 NA예요. 이걸 피하려면 na.rm = TRUE 인자를 붙여야 합니다.

x <- c(5, NA, 7, NA, 9)

is.na(x)               # FALSE TRUE FALSE TRUE FALSE
sum(is.na(x))          # 2 → 결측치 개수 세기
x[!is.na(x)]           # 5 7 9

mean(x)                # NA
mean(x, na.rm = TRUE)  # 7

대체할 때는 x[is.na(x)] <- 0처럼 인덱싱으로 덮어쓰거나, 평균으로 채우려면 x[is.na(x)] <- mean(x, na.rm = TRUE)를 씁니다.

비슷해 보이는 값들의 구분도 자주 물어봐요.

의미
NA 결측치 — 값이 있어야 하는데 없음
NULL 객체 자체가 없음
NaN 수학적으로 정의 안 됨 (0/0 등)
Inf 무한대

mean sd var median 같은 통계 함수는 거의 다 na.rm을 받는데, cor()만 예외use = "complete.obs" 인자를 씁니다. 이 차이도 출제 포인트예요.

데이터프레임과 $ 연산자

각 열이 서로 다른 타입을 가질 수 있는 표 구조입니다. 시험 코드에서 제일 자주 보이는 게 $(열 접근)이에요.

df <- data.frame(
  name  = c("김", "이", "박"),
  score = c(85, 92, 78),
  pass  = c(TRUE, TRUE, FALSE)
)

df$score             # score 열을 벡터로
df[1, ]              # 첫 번째 행
df[df$score >= 80, ] # 80점 이상 행만
str(df)              # 구조 확인
summary(df)          # 요약 통계

summary()는 Min / 1Q / Median / Mean / 3Q / Max 여섯 수치를 보여주고, NA가 있으면 개수까지 표시합니다. head()는 앞 6행, nrow()/ncol()은 행·열 수예요.

타입과 factor

확인 함수는 is.타입(), 변환 함수는 as.타입() 패턴입니다. numeric, character, logical까지는 직관적인데, 시험이 좋아하는 건 factor예요.

size <- factor(c("S", "M", "L"), levels = c("S", "M", "L"))
levels(size)   # "S" "M" "L"

factor는 범주형 변수를 담는 타입이고, levels가 가능한 값의 집합입니다. character와 헷갈리기 쉬운데, factor는 수준이 정해진 범주형이라 회귀 분석에서 가변수(dummy) 처리가 자동으로 된다는 점이 달라요.

할당 기호는 <-가 표준이고 =도 거의 같지만, 함수 인자 자리에서는 =만 쓴다는 차이가 있습니다.

읽기 연습 — 이런 식으로 나옵니다

Q1. 다음 출력은?

v <- c(3, 8, 15, 20, 7)
v[v %% 5 == 0]

%%는 나머지 연산자. 5로 나눠떨어지는 값만 남으니 15 20.

Q2. 두 결과의 차이는?

df <- data.frame(x = c(2, 4, NA, 6))
mean(df$x)               # NA
mean(df$x, na.rm = TRUE) # (2+4+6)/3 = 4

Q3. 다음 출력은?

x <- c("B", "A", "B", "B", "C")
table(x)

table()은 도수분포표 함수. A=1, B=3, C=1.

이런 패턴이 반복돼요. 눈으로만 읽지 말고 직접 결과를 적어본 다음 답을 확인하는 식으로 연습하면 금방 늘어요.

저는 모의고사에서 R 문제만 골라 틀린 걸 모아뒀다가 다시 풀었는데, 문어CBT가 틀린 문제를 자동으로 쌓아줘서 이 방식이랑 잘 맞았어요. 무료라 가볍게 쓰기 좋습니다.

 

SQLD·정처기·컴활·ADsP 무료 CBT 모의고사

기출 변형 문제, 자동 채점, 회차별 실력 추적까지 가입 없이 바로 풀어보세요.

sqldpass.com

헷갈림 방지 요약

  1. 인덱스는 1부터, 음수는 "제외"
  2. NA 포함 평균은 0이 아니라 NA → na.rm = TRUE
  3. cor()use = "complete.obs"
  4. factor = 범주형(levels 있음), character = 자유 문자열
  5. is.*는 확인, as.*는 변환

R 콘솔에서 예제 5~10개만 직접 돌려봐도 감이 확 옵니다. 그 이상의 코딩 실력은 이 시험에 필요 없어요.

다음 글에서는 3과목 통계 파트를 다뤄볼게요 💪