참고도서: R 통계 프로그래밍의 이해 - 차영준, 박진표 (자유아카데미) 4장
www.yes24.com/Product/Goods/68712840
R 통계 프로그래밍의 이해
'최근에 빅데이터와 관련된 용어들이 많이 사용되고 있다. 인공지능, 머신러닝, 데이터 과학, 데이터 과학자, 4차 산업혁명 등과 같은 단어들을 많이 접하게 된다. 이처럼 많은 사람들이 빅데이
www.yes24.com
> #### 4.1 조건문 ####
>
> # 4.1.1 단순 if() 문 #
> x <- c(1,3,5,7,9)
> y <- c(3,4,5,6,7)
> if(mean(x) == mean(y)) print ("mean(x) is equal to mean(y)")
[1] "mean(x) is equal to mean(y)"
> ## x의 평균과 y의 평균이 같을 경우 "mean(x) ~ mean(y)" 문구 출력
> if(var(x) > var(y)) {print("var(x) is greater than var(y)")
+ print(var(x))
+ print(var(y))}
[1] "var(x) is greater than var(y)"
[1] 10
[1] 2.5
> ## x의 분산이 y의 분산보다 클 경우 "var(x) ~ var(y)" 문구를 출력하고
> ## x의 분산값과 y의 분산값도 같이 출력
>
> # 4.1.2 다중 if ~ else 문 #
> x <- c(1,3,5,7,9)
> y <- c(3,4,5,6,7)
> if(is.vector(x)) print("x is vector") else print("x is not vector")
[1] "x is vector"
> ## x가 벡터가 맞으면 "x is vector"를, 아니면 "x is not vector" 출력
> if(var(x)>var(y)){
+ print(mean(x))
+ print(var(x))
+ } else {
+ print(mean(y))
+ print(var(y))
+ }
[1] 5
[1] 10
> ## x의 분산이 y의 분산보다 클 경우 x의 평균과 분산 출력
> ## x의 분산이 y의 분산보다 크지 않을 경우 y의 평균과 분산 출력
>
> # 4.1.3 ifelse() 문 #
> #ifelse() 문
> jumsu <- c(99, 20, 44, 60, 80, 70)
> grade <- ifelse(jumsu >= 60, "Pass", "Fail")
> ## jumsu(점수)가 60점 이상이면 "Pass", 미만이면 "Fail"
> data.frame(jumsu, grade) ## jumsu(점수)와 grade(등급)을 데이터 프레임으로 합침
jumsu grade
1 99 Pass
2 20 Fail
3 44 Fail
4 60 Pass
5 80 Pass
6 70 Pass
>
> #결측값을 0으로 변경
> xVec <- c(11,22,33,44,55,66,NA)
> xVec
[1] 11 22 33 44 55 66 NA
> ifelse(is.na(xVec), 0, xVec) ## xVec에 결측값이 있을 경우 결측값은 0으로 변환, 아니면 그대로 출력
[1] 11 22 33 44 55 66 0
>
> # 4.1.4 switch() 문 #
> score <- c(1,2,3,4,5)
> switch(2, mean(score), sum(score), var(score))
[1] 15
> ## switch: 인수의 값에 따라 해당 조건에 맞는 수식 또는 연산 수행
> ## 위 switch문에서는 인수의 값이 2이므로 두 번째 조건인 sum(score) 출력
> type1 <- "x" ## 쌍따옴표("") 표시 필수
> type2 <- "y"
> type3 <- "z"
> switch(type1, x=mean(score), y=sum(score), z=var(score))
## 인수 type1이 x이기 때문에 이에 해당하는 mean(score) 출력
[1] 3
> switch(type2, x=mean(score), y=sum(score), z=var(score))
## 인수 type2이 y이기 때문에 이에 해당하는 sum(score) 출력
[1] 15
> switch(type3, x=mean(score), y=sum(score), z=var(score))
## 인수 type3이 z이기 때문에 이에 해당하는 var(score) 출력
[1] 2.5
>
> #### 4.2 반복문 ####
>
> # 4.2.1 for() 문 #
> #for() 문을 이용한 짝수와 홀수의 합 계산
> evenSum <- 0 ## evenSum과 oddSum을 0으로 초기화
> oddSum <- 0
> for (x in 1:100)
+ if(x %% 2 == 0) { ## x의 나머지가 0일 경우
+ evenSum <- evenSum + x ## evenSum에 값을 더하고
+ } else { ## 나머지가 0이 아닐 경우
+ oddSum <- oddSum + x ## oddSumm에 값을 더함
+ }
> print(evenSum) ## 짝수의 합 출력
[1] 2550
> print(oddSum) ## 홀수의 합 출력
[1] 2500
>
> #for() 문을 이용한 '결측값을 제외'한 벡터 생성
> data <- c(1,NA,NA,2,3,4,5,NA,6,7,8,NA,9,10,NA)
> completeData <- c() ## completeData 변수를 초기화
> completeData ## NULL
NULL
>
> for(x in data)
+ if(!is.na(x)) { ## x가 결측값이 아닌 경우 (!: NOT의 의미)
+ completeData <- c(completeData, x)
+ } else { ## 변수에 값을 넣고 아닐 경우 실행 없이 넘어감
+ next
+ }
> print(completeData)
[1] 1 2 3 4 5 6 7 8 9 10
> print(length(completeData)) ## 결측값 제외된 completeData 변수의 길이 출력
[1] 10
>
> #for() 문을 이용한 '결측값을 0으로 수정'한 벡터 생성
> data <- c(1,NA,NA,2,3,4,5,NA,6,7,8,NA,9,10,NA)
> for(x in 1:length(data)) { ## 1부터 data 변수의 길이까지 반복
+ if(is.na(data[x])) data[x] <- 0
+ } ## data[x](벡터의 자리위치)의 값이 결측값일때 0으로 변환
> print(data) ## 결측값이 0으로 변환된 data 변수 출력
[1] 1 0 0 2 3 4 5 0 6 7 8 0 9 10 0
> print(length(data)) ## 결측값 변환된 data 변수 길이 출력
[1] 15
> print(mean(data)) ## 평균 출력: 결측값이 0이 되었으므로 이 또한 평균 계산식에 포함
[1] 3.666667
'데이터 [Data] > R' 카테고리의 다른 글
R Graphics 1: plot(), attach(), with() 함수, 제목, 축 이름, 점(pch) (0) | 2021.06.01 |
---|---|
R apply 함수군: apply(), lapply(), sapply(), tapply(), mapply() (0) | 2021.05.01 |
R 데이터 가공: 결측값 처리, 그룹별 요약통계량 계산, 변환 (0) | 2021.04.29 |
R 데이터 가공: 정렬, 결합 및 분리 (0) | 2021.04.28 |
R 데이터 가공: 행과 열의 선택, 변수 추가 및 삭제 (데이터 프레임) (0) | 2021.04.27 |
댓글