Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

천선생의 삶

[R] 조건문 활용하기 - if, else, if else 본문

Data Analysis/R Basic

[R] 조건문 활용하기 - if, else, if else

천선생 2019. 7. 10. 12:00

안녕하세요. 천선생입니다.

 

 지난 포스트까지는 데이터 유형에 대해 정리해봤습니다.

이번 포스트와 다음 포스트에서는 처음 프로그래밍을 접하셨을 때 가장 어려워하시는

조건문과 반복문에 대해 알아보도록 할건데요,

특히 이번 포스트에서는 조건문에 대해서 알아보도록 하겠습니다.

 

- IF?

 조건문이란 말그대로 지정한 조건에 해당할 때, 코드를 수행하는 구문을 의미합니다.

이를 활용하여 원하는 데이터를 출력 또는 연산할 수 있으며,  조건문 안에 들어가는 값은 논리값으로 입력합니다.

  - 논리값이란?

 TRUE / FALSE 를 의미합니다. 즉, 조건문 안에 들어가는 식은 논리연산자 형식이 올바르다고 할 수 있습니다.

# if문 예제

if ( 조건문 : 반환값은 T / F ) {
  조건을 만족할 때 수행할 코드
}

 

- ELSE?

 조건문은 크게 if문, ifelse문으로 존재합니다. 이때 else는, 조건을 확장시키는 역할을 하게 됩니다.

가령, 첫번째 조건이 만족하지 않으면 if 조건문 밖으로 탈출하게 되는데,

이후 else문을 만나게 되면 (즉, 이외의 조건에서) 이때의 코드를 수행하게 됩니다.

# if else문 예제

if ( 1번 조건문 : 반환값은 T / F ) {
  1번 조건을 만족할 때 수행할 코드
} else {
  1번 조건문을 만족하지 않을 때 수행할 코드
}

# 조건의 확장
if ( 1번 조건문 : 반환값은 T / F ) {
  1번 조건을 만족할 때 수행할 코드
} else if (2번 조건문) {
  2번 조건을 만족할 때 수행할 코드
} else {
  2번 조건문을 만족하지 않을 때 수행할 코드
}

 

- ifelse?

 ifelse는 함수로 받아들이는 것이 이해가 빠를 것이라고 생각됩니다.

조건을 제시하고 해당할 때의 반환값, 해당하지 않을 때의 반환값을 순서대로 한줄로 구현 가능한 장점이 있습니다!

#ifelse 예제
ifelse(조건문, T일때 반환값, F일때 반환값)

 

- 활용

 정의 위주의 설명으로는 완벽한 이해가 힘든 부분이기 때문에, 우리는 데이터를 갖고 실습해보도록 하겠습니다.

데이터는 R에서 기본적으로 제공해주는 mtcars를 사용하겠습니다.

<ifelse 를 활용한 새로운 변수 만들기>

#ifelse 함수 활용예제
data <- mtcars
str(data)
# 'data.frame':	32 obs. of  11 variables:
# $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
# $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
# $ disp: num  160 160 108 258 360 ...
# $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
# $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
# $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
# $ qsec: num  16.5 17 18.6 19.4 17 ...
# $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
# $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
# $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
# $ carb: num  4 4 1 1 2 1 4 2 2 4 ...

data$mpg_class <- ifelse(data$mpg >= 20, '연비좋음', '연비나쁨')
str(data)
# 'data.frame':	32 obs. of  12 variables:
# $ mpg      : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
# $ cyl      : num  6 6 4 6 8 6 8 4 4 6 ...
# $ disp     : num  160 160 108 258 360 ...
# $ hp       : num  110 110 93 110 175 105 245 62 95 123 ...
# $ drat     : num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
# $ wt       : num  2.62 2.88 2.32 3.21 3.44 ...
# $ qsec     : num  16.5 17 18.6 19.4 17 ...
# $ vs       : num  0 0 1 1 0 1 0 1 1 1 ...
# $ am       : num  1 1 1 0 0 0 0 0 0 0 ...
# $ gear     : num  4 4 4 3 3 3 3 4 4 4 ...
# $ carb     : num  4 4 1 1 2 1 4 2 2 4 ...
# $ mpg_class: chr  "연비좋음" "연비좋음" "연비좋음" "연비좋음" ...

# ifelse 함수로 생성된 mpg_class 벡터가 새로운 변수로 입력된 모습.

 

<ifelse 구문을 활용한 예제>

# if else 구문을 활용하는 간단한 예제

a <- 2
if (a > 3) {
  print('3보다 큰 수')
} else if (a == 3) {
  print('3')
} else {
  print('3보다 작은 수')
}

# if else 구문을 활용한 데이터타입 확인하기.

data <- mtcars
mpg_data <- data$mpg
# [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4
# [13] 17.3 15.2 10.4 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3
# [25] 19.2 27.3 26.0 30.4 15.8 19.7 15.0 21.4

class(mpg_data) #데이터의 유형을 판단하는 함수
# [1] "numeric"

# 주어진 데이터가 문자형인지, 수치형인지 확인
if (class(mpg_data) == 'character') {
  print('문자형 데이터입니다.')
} else if (class(mpg_data) == 'numeric') {
  print('수치형 데이터입니다.')
} else {
  print('이외의 데이터형태입니다.')
}
# [1] "수치형 데이터입니다."

# 데이터 유형을 바꿔서 다시 확인.
mpg_data_factor <- as.factor(mpg_data)

if (class(mpg_data_factor) == 'character') {
  print('문자형 데이터입니다.')
} else if (class(mpg_data_factor) == 'numeric') {
  print('수치형 데이터입니다.')
} else {
  print('이외의 데이터형태입니다.')
}
# [1] "이외의 데이터형태입니다."
Comments