# 데이터 준비
mtcars
str(mtcars)
head(mtcars)

# aggregate()를 이용한,  cyl칼럼에 따른, mpg칼럼의 평균값들
aggregate(mtcars$mpg, by=list(mtcars$cyl), mean)

#### ***사용자 정의함수 + if문을 이용해서 aggregate()흉내내기*** ####
# udf의 ()인자에 cyl칼럼이 들어갈 것임...
# 그값이 4, 6, 8일 때,, 그 row들을 인덱싱해서  mpg의 평균
# 만약 함수안에서 변수에 안담기고 함수식만 있다면 -> R은 알아서 return을 해주는 기능이 있다.   변수에 담그면 반드시 return()
mean_by_cyl <- function(x){
   if(x == 4){
     # aggregate로 쓸 경우 : aggregate(mtcars$mpg, by=list(mtcars$cyl), mean)  [1, 2]
     return(    mean( mtcars[ mtcars$cyl == 4, "mpg"] )    )
   }else if(x == 6){
     return(    mean( mtcars[ mtcars$cyl == 6, "mpg"] )    )
   }else if(x == 8){
     return(    mean( mtcars[ mtcars$cyl == 8, "mpg"] )    )
   } else{
     print("잘못 입력되었습니다. 4 or 6 or 8 중에 입력해주세요")
   }
} # if문 끝

mean_by_cyl(4)
mean_by_cyl(6)
mean_by_cyl(8)

mean_by_cyl(7)


# 4, 6, 8은 들어오는 값이니 x로 대체하기
# my) 4 or 6 or 8 인 경우를,,, %in% 으로 대체하기***
mean_by_cyl <- function(x){
   if(x %in% c(4, 6, 8)){
     return(    mean( mtcars[ mtcars$cyl == x, "mpg"] )    )
   }else{
     print("잘못 입력되었습니다. 4 or 6 or 8 중에 입력해주세요")
   }
} # if문 끝

mean_by_cyl(4)
mean_by_cyl(6)
mean_by_cyl(8)
mean_by_cyl(7)

#### **** if문을 써서 aggregate()를 흉내낼 때의 장점 -> 경우의 수별로 문자열 띄울 수 있다.####
# *** return( '문자열', 변수, '문자열') 처첨 섞인 경우에는
# 바로 return 안되므로 paste로 묶어서 하나로 return한다 ***
# *** round( a, 2) --> 소수점 2번째 자리**까지** 표시

mean_by_cyl <- function(x){
   if(x == 4){
     a <- round(mean( mtcars[ mtcars$cyl == 4, "mpg"] ), 2)
     return( paste0('The avg mile per gallon of ', x, ' cylinder car is ', a))
   }else if(x == 6){
     a <- round(mean( mtcars[ mtcars$cyl == 6, "mpg"] ), 2)
     return( paste('The avg mile per gallon of ', x, ' cylinder car is ', a, sep=''))
   }else if(x == 8){
     a <- round( mean( mtcars[ mtcars$cyl == 8, "mpg"] ) , 2)
     return( paste('The avg mile per gallon of ', x, ' cylinder car is ', a, sep=''))
   } else{
     print("잘못 입력되었습니다. 4 or 6 or 8 중에 입력해주세요")
   }
} # if문 끝

mean_by_cyl(4)
mean_by_cyl(6)
mean_by_cyl(8)

+ Recent posts