[R] 데이터 프레임 내 모든 숫자를 '홀수'와 '짝수'로 바꾸기

해당 포스트에서는 R에서 데이터 프레임(Data Frame)에 있는 모든 숫자 데이터를 한 번에 '홀수'와 '짝수'로 변환하는 방법에 대해 설명합니다.

replace-data-with-odd-or-even-numbers-in-r

INTRO

R에서 사용되는 기본 자료형(Basic Data Types)은 총 5가지가 있습니다. 그 중에서도 수치형(numeric or integer)과 문자형(character)은 상대적으로 많이 사용되기도 하지만, 데이터 분석 과정에서 변환을 통해 데이터 특성을 다르게 고려해야 하는 경우가 종종 발생합니다.

아래에서는 네이버 지식을 통해 받은 질문 중, 데이터 프레임(Data Frame)에 저장된 모든 숫자를 한 번에 '홀수', '짝수'라는 문자로 변경하는 방법에 대해 설명합니다.

replace-data-with-odd-or-even-numbers-in-r
▲ 문제 풀이 결과

질문 내용 및 요약

  • R에서 엑셀(Excel)자료를 불러왔는데 데이터의 양이 엄청나게 많음
  • 홀수는 'odd'로 짝수는 'even' 바꾸고 싶음

replace-data-with-odd-or-even-numbers-in-r
[출처] 네이버 지식인

풀이

해당 풀이에서는 엑셀 자료에서 불러온 자료를 mydf라는 변수에 데이터 프레임(Data Frame) 형태로 저장했다고 가정하고 시작하겠습니다. 또한, 데이터는 임의의 샘플 데이터를 생성하여 사용 예정이며, 크기는 다르지만 동일한 동작을 수행하는 코드를 작성할 예정이니 활용하시는데는 문제 없으실 겁니다.

1. 데이터 생성

먼저, 풀이에 사용할 데이터를 생성하겠습니다. 데이터는 3개 컬럼에 숫자값(numeric)들로만 저장된 데이터 프레임 mydf입니다.

mydf <- data.frame(a=c(1,2,3),b=c(4,5,6),c=c(2,4,6))
mydf
  a b c
1 1 4 2
2 2 5 4
3 3 6 6

2. 데이터 변환

문제에서 요구하는 대로 모든 숫자값을 홀수면 'even', 짝수면 'odd'로 변경해 보겠습니다. 변경을 위해서는 ifelse() 함수를 이용하면 간단하게 해결 가능합니다.

mydf <- ifelse(mydf %% 2 == 0, "even", "odd")
mydf
     a      b      c     
[1,] "odd"  "even" "even"
[2,] "even" "odd"  "even"
[3,] "odd"  "even" "even"


출력 결과를 보면, mydf의 모든 값들이 'odd'와 'even'으로 변경된 것을 볼 수 있습니다. ifelse()함수는 '조건에 맞는 경우'와 '조건에 맞지 않는 경우'에 각각 어떤 값들을 대입할 것인지 정의할 수 있으며, 위 코드에서는 mydf %% 2 == 0라는 조건을 통해, 데이터를 2로 나눈 값의 나머지가 0인 경우 'even', 아니라면 'odd'를 대입해준다고 이해하시면 됩니다.

mydf %% 2 == 0의 의미
프로그래밍에서는 홀수(odd)와 짝수(even)을 구분해야 하는 경우가 종종 생깁니다. 이 때, 많이 사용되는 로직이 '나머지가 1 또는 0인지를 판단'하는 것이고 이번 풀이에서도 해당 개념을 이용하였습니다.

3. 추가 분석

문제에서 제시된 조건은 모든 데이터를 한 번에 변경하는 것이 었습니다. 하지만, 일반적으로 전체가 아닌 특정 컬럼을 대상으로 문제가 제시되는 경우가 많기에 간단한 예시를 하나 더 준비하였습니다.

아래 코드는 mydf 데이터에서 a컬럼의 값을 기준으로 홀수/짝수를 판단하고, a2 컬럼을 생성하여 결과를 저장합니다. 많은 경우, 해당 분석 예시가 더 유용할 수 있을 거라 생각됩니다.

mydf <- data.frame(a=c(1,2,3),b=c(4,5,6),c=c(2,4,6))
mydf
  a b c
1 1 4 2
2 2 5 4
3 3 6 6
mydf$a2 <- ifelse(mydf$a %% 2 == 0, "even", "odd")
mydf
  a b c   a2
1 1 4 2  odd
2 2 5 4 even
3 3 6 6  odd

마무리

이번 포스트에서는 ifelse() 함수 사용법은 홀수(odd), 짝수(even) 변경 예시와 함께 설명하였습니다. ifelse()함수와 홀수/짝수 판단 로직(mydf %% 2 == 0) 모두 활용도가 높은 편이니 다양한 연습을 통해 익혀 두시는 것이 좋습니다.


관련 링크

[1] 네이버 지식인
[2] W3Schools - R Data Types