
안녕하세요, 공부하는 감자입니다 🥔
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부터, 음수는 "제외"
- NA 포함 평균은 0이 아니라 NA →
na.rm = TRUE cor()만use = "complete.obs"- factor = 범주형(levels 있음), character = 자유 문자열
is.*는 확인,as.*는 변환
R 콘솔에서 예제 5~10개만 직접 돌려봐도 감이 확 옵니다. 그 이상의 코딩 실력은 이 시험에 필요 없어요.
다음 글에서는 3과목 통계 파트를 다뤄볼게요 💪
'자격증 > ADsP' 카테고리의 다른 글
| ADsP 기출복원 최신 회차 모음 — 48회까지 정답·해설 보며 풀기 (0) | 2026.06.23 |
|---|---|
| ADsP 50회 시험은 8월 8일, 접수는 7월 6일부터 (2026 하반기 일정) (0) | 2026.06.23 |
| ADsP 시험 전날 복습 노트, 과목별 빈출 정리 (0) | 2026.06.20 |
| ADsP 7일 벼락치기 시간표 (직장인·비전공자) (0) | 2026.06.20 |
| ADsP 3과목 분석 기법 구분법 (회귀·분류·군집) (0) | 2026.06.16 |