ADsP R기초

본 토픽은 현재 준비중입니다. 공동공부에 참여하시면 완성 되었을 때 알려드립니다.

데이터 프레임 apply

이번에는 미국의 각 주별 범죄율을 담은 내장 데이터인 USArrests를 사용하겠습니다. 알라바마, 알래스카로 시작해서 미국 모든 주들의 살인, 폭행, 도시범죄, 강간 범죄율을 담은 데이터입니다.

> head(USArrests)
           Murder Assault UrbanPop Rape
Alabama      13.2     236       58 21.2
Alaska       10.0     263       48 44.5
Arizona       8.1     294       80 31.0
Arkansas      8.8     190       50 19.5
California    9.0     276       91 40.6
Colorado      7.9     204       78 38.7

apply계열 함수들은 데이터를 가져다가 행이나 열 방향으로 합계(sum)나 평균값(mean) 등을 계산할 때 씁니다. 백문이 불여일견 예를 들어보겠습니다.

#모든 주의 강력 범죄율 평균(mean)을 냅니다.
#숫자 2를 넣어줘야 열 방향으로 평균을 계산합니다.
> apply(USArrests,2,mean)
  Murder  Assault UrbanPop     Rape 
   7.788  170.760   65.540   21.232 
   
#숫자 1을 넣어주면 각 주 별로 4가지 범죄율의 평균을 내게 됩니다.
> head(apply(USArrests,1,mean))
   Alabama     Alaska    Arizona   Arkansas California   Colorado 
    82.100     91.375    103.275     67.075    104.150     82.150

apply함수에서 1과 2를 구분하는 문제가 자주 출제 됩니다.

이와 비슷한 함수로 lapply(결과를 리스트로 반환)와 sapply가(결과를 벡터나 행렬로 반환) 있습니다. 둘은 잘 출제되지 않으니 이런 게 있구나 하고 알아두기만 하면 됩니다. 이 둘은 숫자를 넣어주지 않아도 알아서 열 방향(2)으로 평균을 냅니다.

하지만 좀 특별한 친구가 있는데 바로 tapply()입니다. 이 친구는 여러 요인(factor)으로 분류된 데이터에 함수를 적용할 때 씁니다. 예를 들어 앞에서 본 iris붓꽃 데이터에 tapply()를 쓸 수 있습니다.

#tapply()는 데이터 프레임에 직접 쓸 수 없습니다. 이렇게 에러가 납니다.
> tapply(iris, iris$Species, mean)
Error in tapply(iris, iris$Species, mean) : 
  인자들은 반드시 같은 길이를 가져야 합니다

#색인을 써서 한 열만 리스트로 뽑아낸 뒤 tapply()함수를 적용합니다.
> tapply(iris$Petal.Length, iris$Species, mean)
    setosa versicolor  virginica 
     1.462      4.260      5.552 

기출 연습문제

> oneToFif <- 1:15
> dim(oneToFif)<-c(3,5)
> oneToFif
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    4    7   10   13
[2,]    2    5    8   11   14
[3,]    3    6    9   12   15

위와 같은 행렬에서 모든 '행' 별로 합을 구하는 프로그램으로 옳은 것은?

1. apply(oneToFif, 1, sum)

2. rapply(oneToFif, sum)

3. sapply(oneToFif, mean)

4. apply(oneToFif, 2, sum)

댓글

댓글 본문
작성자
비밀번호
  1. Taehee Kim
    제가 이 강의 내용 기반으로 스터디를 진행하고 있는데요. 앞으로 기존 강의 내용도 보강하고, R통계와 R정형데이터 분석까지 다룰 예정입니다. 그 뒤에는 영상 강의로 더 자세한 내용도 다뤄보려 합니다.

    여기까지 공부해주셔서 감사합니다.
    대화보기
    • student
      정리가 정말 잘 되어있어서, 마지막 까지 수월하게 R기초 공부할 수 있었습니다.
      감사드립니다.
    버전 관리
    Taehee Kim
    현재 버전
    선택 버전
    graphittie 자세히 보기