Practice makes perfect

[R] plyr 패키지 본문

빅데이터/R

[R] plyr 패키지

kerpect 2020. 7. 2. 21:55
728x90
반응형
SMALL

plyr 패키지 

: 두개 이상의 데이터프레임을 대상으로 key 값을 이용하여 하나의 패키지로 병합(merge) 하거나,
집단 변수를 기준으로 데이터 프레임의 변수에 함수를 적용하여 요약집계 결과를 제공하는 패키지입니다.

 

 

 

1)  join 의 기능

 

① 데이터 병합

x <- data.frame(id = c(1,2,3,4,5), height = c(160,171,173,162,165))
y <- data.frame(id = c(5,4,1,3,2), weight = c(55,73,60,57,80))

x;y
- 출력값 -
 id height
  1    160
  2    171
  3    173
  4    162
  5    165
 
 id weight
  5     55
  4     73
  1     60
  3     57
  2     80

z <- join(x,y, by = 'id') # by = 'id' 공통인 id를 기준으로 데이터 병합 
z
 - 출력값 - 
 id height weight
  1    160     60
  2    171     80
  3    173     57
  4    162     73
  5    165     55

- 순서가 다르게 저장되어 있어도 정렬하여 출력합니다.

 

# merge와 join 같은 결과값을 낸다

a <- merge(x,y,by= 'id') # by = 'id' 공통인 id를 기준으로 데이터 병합 
a
- 출력값 - 
 id height weight
  1    160     60
  2    171     80
  3    173     57
  4    162     73
  5    165     55

 

merge와 같은 기능을 가지고 있는데 왜 join을 사용할까요?

그 이유는 추가적인 기능을 많이 가지고 있기 때문입니다. 그 기능을 조금 더 알아보겠습니다.

 

 

② 왼쪽(left) 조인하기 

-  x, y 의 데이터에서 6과 5 다른 값으로 저장 되어 있는 상황

x <- data.frame(id = c(1,2,3,4,6), height = c(160,171,173,162,165))
y <- data.frame(id = c(5,4,1,3,2), weight = c(55,73,60,57,80))

left <-join( x , y , by = 'id')

left
    - 출력값 -
  id height weight
  1    160     60
  2    171     80
  3    173     57
  4    162     73
  6    165     NA

 - by = 'id' 공통인 id를 기준으로 데이터 병합합니다.
 - 왼쪽 조인 방법이 default 값으로, 왼쪽 변수를 기준으로 하여 삽입 되어 있는 값이 없으면 NA(결측치)를 반환합니다.
   (왼쪽변수 기준 : NA(결측치;누락된 값, 비어있는 값))

 

 

② 내부(inner) 조인 

x <- data.frame(id = c(1,2,3,4,6), height = c(160,171,173,162,165))
y <- data.frame(id = c(5,4,1,3,2), weight = c(55,73,60,57,80))

inner <-join( x , y , by = 'id' , type = 'inner') 
                                               

inner
 - 출력값 -
id height weight
1    160     60
2    171     80
3    173     57
4    162     73

type='inner' : 값이 있는 것만 조인합니다. - default 값을 변경 하고 싶을 때 type 사용

 

 

③ 전체(full) 조인하기 

x <- data.frame(id = c(1,2,3,4,6), height = c(160,171,173,162,165))
y <- data.frame(id = c(5,4,1,3,2), weight = c(55,73,60,57,80))

full <-join( x , y , by = 'id' , type = 'full')

full
- 출력값 -
id  height  weight
1    160     60
2    171     80
3    173     57
4    162     73
6    165     NA
5     NA     55

type ='full' : 모든 항목 조인합니다.

 

- id의 순서는 먼저 오는 데이터 순으로 입력 됩니다.

 

 

④ key 값으로 병합하기

x <- data.frame(key1 = c(1,1,2,2,3) , 
                key2 = c('a', 'b' , 'c' , 'd', 'e'), val1 = c(10,20,30,40,50)) 
y <- data.frame(key1 = c(3,2,2,1,1) ,
                key2 = c('e', 'd' , 'c' , 'b', 'a'), val1 = c(500,400,300,200,100)) 

xy <- join(x,y,by=c('key1','key2'))
xy 
       - 출력값 - 
   key1 key2 val1 val1
    1    a   10  100
    1    b   20  200
    2    c   30  300
    2    d   40  400
    3    e   50  500

 

 

 

 tapply()

: 이용한 집단별(그룹별) 통계치 구하기(활용도높음)

 

iris 데이터 셋을 대상을 tupply() 함수 적용해보겠습니다.

 

< iris >

R에서 제공되는 기본 데이터 셋으로 3가지 꽃의 종류별 50 개씩 전체 150개의 관측치로 구성됩니다. iris는 붓꽃에 관한 데이터 5개의 변수로 제공하며, 각 변수의 내용은 다음과 같습니다.

Sepal.Length(꽃받침 길이) , Sepal.Width(꽃받침 너비), Petal.Length(꽃잎 길이),

Petal.Width(꽃잎 너비), Species(꽃의 종류) : 3가지 종류별 50개 (전체 150개 관측치)

 

tapply(iris$Sepal.Length, iris$Species, mean) # 평균

 - 출력값 - 
setosa versicolor  virginica 
5.006      5.936      6.588 

tapply(iris$Sepal.Length, iris$Species, sd # 표준편차(sd)

 - 출력값 - 
  setosa    versicolor  virginica 
 0.3524897  0.5161711  0.6358796 

데이터 셋 <꽃받침의 길이>, 그룹핑할 데이터 셋 <종(3가지를 그룹핑을 함)>, 기능(함수)

 

 

ddply()

: 집단 변수 대상 통계치 구하기

형식) ddply(dataframe, .(집단변수), 요약집계, 컬럼명=함수(변수))

설명) dataframe의 집단변수를 기준으로 변수에 함수를 적용하여 컬럼명으로 표현합니다.

 

-  tapply 와 차이점 추가적으로 여러개의 값을 출력할 수 있습니다.

 

avg_df <- ddply(iris, .(Species), summarise, avg = mean(Sepal.Length))

avg_df
     - 출력값 - 
   Species    avg
    setosa  5.006
 versicolor 5.936
  virginica 6.588

# 꽃의 종(Species)으로 여러 개의 함수 적용하기  
val <- ddply(iris, .(Species), summarise, avg = mean(Sepal.Length), 
                                          std =sd(Sepal.Length), 
                                          max = max(Sepal.Length),
                                          min = min(Sepal.Length))

val
                - 출력값 - 
    Species   avg      std   max min
     setosa 5.006 0.3524897 5.8 4.3
 versicolor 5.936 0.5161711 7.0 4.9
  virginica 6.588 0.6358796 7.9 4.9


# 결과값의 단위가 다르므로 같도로 처리. 
round <- ddply(iris, .(Species), summarise, avg = round(mean(Sepal.Length),2), 
                                            std = round(sd(Sepal.Length),2), 
                                            max = round(max(Sepal.Length),2),
                                            min = round(min(Sepal.Length),2))

round # 소수점 둘째 자리까지 출력. 

             - 출력값 - 
   Species  avg  std  max min
     setosa 5.01 0.35 5.8 4.3
 versicolor 5.94 0.52 7.0 4.9
  virginica 6.59 0.64 7.9 4.9

 round() :  반올림 처리하기 .

 

 

728x90
반응형
LIST

'빅데이터 > R' 카테고리의 다른 글

[R] 파이프 연산자(pipe)  (0) 2020.07.03
[R] dplyr 패키지  (2) 2020.07.03
[R] 연속변수(Continuous quantitative data) 시각화  (0) 2020.07.02
[R] 이산변수 시각화  (0) 2020.07.01
[R] 주요 내장 함수  (0) 2020.07.01