R 조건 연산 프로그래밍 (conditional process programming) : if(), elseif()
R 분석과 프로그래밍/R 프로그래밍 2015. 9. 5. 23:03
R에서 특정 조건을 만족하는지의 조건을 주고 뒤에 이어지는 표현식을 반복적으로 수행하게 하는 조건 연산 프로그래밍에 대해 알아보겠습니다.
먼저 한개의 숫자형 값에 대해 이것이 짝수인지 홀수인지 판단하는 R program을 짜보도록 하겠습니다.
- 하나의 값에 대한 판단인 경우 :
if( 조건1 ) {
표현식 1
} else if (조건2) {
표현식 2
} else {
표현식 3
}
[ 짝수, 홀수 여부 판단 프로세스 ]
(1) 하나의 논리값에 대한 판단인 경우 : if()
> ## 하나의 논리값에 대한 판단 > # if() > x1 <- c(4) > if (x1 %% 2 == 0) { + y1 = c("Even Number") + print(y1) + } else { + y1 = c("Odd Number") + print(y1) + } [1] "Even Number"
> x2 <- c(5) > if (x2 %% 2 == 0) { + y2 = "Even Number" + print(y2) + } else { + y2 = "Odd Number" + print(y2) + } [1] "Odd Number" |
위의 2개의 예에서는 x1 이 4일 때 "Even Number"라고 판단했고, x2가 5일 때 "Odd Number"라고 잘 판단하였습니다.
하지만, 아래의 예제처럼 두개 이상의 논리값 벡터를 사용하는 경우에는 오류가 발생하게 되며, 아래 예제에서 보면 1~5까지 숫자 중에서 제일 처음으로 나오는 1에만 아래의 조건연산 프로그램이 적용되었고 두번째부터는 적용이 안되었습니다. 이럴 때는 ifelse() 문을 사용하여야 합니다.
> # Error
> x3 <- c(1, 2, 3, 4, 5)
> if (x3 %% 2 == 0) {
+ y3 = "Even Number"
+ print(y3)
+ } else {
+ y3 = "Odd Number"
+ print(y3)
+ }
[1] "Odd Number"
Warning message:
In if (x3%%2 == 0) { :
the condition has length > 1 and only the first element will be used
(2) 두개 이상의 논리값 벡터에 대한 판단 : ifelse()
ifelse( 조건1, 표현식1,
ifelse( 조건2, 표현식2,
ifelse( 조건3, 표현식3, 표현식4)
)
)
위와 동일하게 1~5의 숫자에 대해서 이번에는 ifelse() 문을 사용해서 짝수, 홀수 여부를 판단하게 하고, 이를 데이터프레임 구조로 변환해서 view해보겠습니다.
> ## vector 에 대한 판단 > # 홀수/짝수 여부 판단 : ifelse( condition, expression 1, expression 2 ) > x <- c(1, 2, 3, 4, 5) > z <- ifelse(x%%2 == 0, "Even Number", "Odd Number") > xz <- data.frame(x, z) > xz x z 1 1 Odd Number 2 2 Even Number 3 3 Odd Number 4 4 Even Number 5 5 Odd Number |
이번에는 양수, 0, 음수 인지 여부를 판단한 후 원래 벡터와 판단하는 프로그램을 ifelse()를 사용하여 짜보도록 하겠습니다.
[ 양수, 0, 음수 인지 여부 판단하는 프로세스 ]
|
To 산낙지님,
제가 가족 여행다녀오느라 이제서야 집에 와서 댓글 달려고 막 하는 와중에...댓글을 삭제하셨네요. ^^;
3가지 조건을 주어서 1, 0 혹은 yes, no 범주형 dummy 변수를 생성하는 방법은 아래를 참고하세요.
MASS 패키지의 Cars93데이터프레임을 가지고 예를 들었습니다.
[예제] "차종(Type)이 "Campact" 이고 & 가격(Price)이 16이하이고 & 고속도로연비(MPG.highway)가 30이상이면 1, 그 외는 모두 0인 변수 sub_yn 을 만드시오"
## Making dummy variable using ifelse() and transform()
library(MASS)
str(Cars93)
summary(Cars93$Price)
summary(Cars93$MPG.highway)
Cars93 <- transform(Cars93,
sub_yn = ifelse(Type == c("Compact")
& Price <= 16
& MPG.highway >= 30, 1, 0))
이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡' 단추를 꾸욱 눌러주세요.^^
'R 분석과 프로그래밍 > R 프로그래밍' 카테고리의 다른 글
[R] 폴더 내 여러개 파일들을 Loop 돌려서 자동으로 불러오기 (154) | 2016.07.02 |
---|---|
R "target of assignment expands to non-language object" error : assign() (2) | 2015.09.22 |
ggplot2 저장 : ggsave(), console 내용 text 저장 : capture.output() (0) | 2015.09.17 |
R 사용자 정의 함수 (User Defined Function) (4) | 2015.09.11 |
R 반복 연산 프로그래밍(Loop process programming) : for(), while() (17) | 2015.09.05 |