본문 바로가기
R 주제/통게분석(임시)

R의 apply 함수(함수를 배열에 원하는 방향으로 적용)

by 만다린망고 2021. 3. 18.
반응형

apply 함수는 벡터,행렬,배열에 원하는 함수를 원하는 방향으로 적용해줍니다. 예를들어봅시다. 

 

아래와 같은 데이터가 있습니다. 어떤 반의 인원이 다섯명이고, 다섯사람이 세과목의 시험을 본 결과 데이터입니다. 

 

> Math=c(94,82,45,55,67)

> English=c(88,86,56,90,50)

> Science=c(87,76,65,43,55)

 

데이터프레임에 넣었습니다. 

 

> DF1=data.frame(Math,English,Science)

> DF1
  Math English Science
1   94      88      87
2   82      86      76
3   45      56      65
4   55      90      43
5   67      50      55

 

apply 함수를 적용해봅시다. apply함수는 아래와 같은 형식으로 입력합니다. 

 

apply(데이터, 방향, 함수)

 

방향은 행방향이 1, 열방향이 2입니다. 

 

먼저 과목별 평균을 구해봅시다. 열(column)방향으로 평균을 내야합니다. 결과는 벡터로 출력됩니다. 

 

> mean_each_subject=apply(DF1,2,mean)

> mean_each_subject
   Math English Science 
   68.6    74.0    65.2 

 

이번에는 사람별 세과목 평균을 구해봅시다. 

 

> mean_each_student=apply(DF1,1,mean)

> mean_each_student
[1] 89.66667 81.33333 55.33333 62.66667 57.33333

 

만약 열이나 행방향으로 적용되는 함수가 아니라 개별적으로 적용되는 함수는 어떻게 될까요??

 

먼저 각 원소를 제곱하는 함수를 행방향으로 적용해보았습니다. 결과는 행렬로 출력됩니다. 원래의 데이터프레임에서 행과 열이 바뀌어 출력됩니다. 

 

> square_score=apply(DF1,1,function(x))

> square_score
        [,1] [,2] [,3] [,4] [,5]
Math    8836 6724 2025 3025 4489
English 7744 7396 3136 8100 2500
Science 7569 5776 4225 1849 3025

 

이번에는 각 원소를 제곱하는 함수를 열방향으로 적용해보았습니다. 결과는 행렬로 출력됩니다. 

 

> square_score=apply(DF1,2,function(x))

> square_score
     Math English Science
[1,] 8836    7744    7569
[2,] 6724    7396    5776
[3,] 2025    3136    4225
[4,] 3025    8100    1849
[5,] 4489    2500    3025

> class(square_score)
[1] "matrix"
반응형

댓글