R에서 열 쌓기, 행 쌓기 자주 사용되는 함수 gather spread

     데이터  업무를 하다보면  사용 할 일은 매우 많은데,  막상 사용하려 하면, 실제로 잘 안되는 것은 열 쌓기 행 쌓기 특히 열 쌓기는 ggplot2에서 그래프 그릴 때 아주 많이 사용된다. 

만약에 지게차 톤수별로,  시간 단위의 사용량 그래프를 그리혀고 하면,  열 쌓기는 매우 중요 하다. 

아래의 스프레드 시트 데이터는  맨 처음 보았을 때,  매우 당황 하였던 데이터이다.


열 쌓기 in r

그러니까?  누군가는 필요하였기 때문에  가져간 소모품들이다.    여기에서 문제는 어느지역에 누가 어느 소모품을 몇 개 가져갔는지 데이터화 하는 문제이다. 


엑셀에서는 안타깝게도 열쌓기가 되지 않는다.    그래서 아래와 같이 R에서 수행 할 예정 이다.

아래는 R의 예제를 보여 준다.

# 라이브러리 불러오기   
  library(readxl)
  library(httr)
  library(stringr)
  library(dplyr)
  library(tidyr)

# 파일을 불러오는 path를 url 변수로 정의      
  url = "https://drive.google.com/u/0/uc?id=1rJrcab-CR1NUSDTCom-ysU-UbkwnYn8w&export=download"
  GET(url, write_disk(tf <- tempfile(fileext = ".xlsx")))
 system.time( df <- read_excel(tf, 1L))  

 위의 데이터는 구글 클라우드에서 불러 온 것이다. 

 열 쌓기   
  df1 <- df %>%
    gather(key = "품목", value = "수량", -c(지역,담당자))
  
# 열 쌓기 내용 보기   
  df1 %>% 
    filter(수량 > 0)
## # A tibble: 29 × 4
##    지역  담당자 품목      수량
##    <chr> <chr>  <chr>    <dbl>
##  1 B     전민지 하이타이    20
##  2 B     전민지 퐁퐁        20
##  3 B     전민지 비누       150
##  4 H     이상선 종이타올     2
##  5 B     전민지 면장갑     520
##  6 H     이상선 면장갑    3000
##  7 P     유나래 면장갑     100
##  8 B     전민지 반코팅     520
##  9 H     이상선 반코팅     400
## 10 P     유나래 반코팅     100

위에 있는 데이터에서 "지역, 담당자"를 빼고  key 값과,  value 값은 품목하고 수량으로 대치 시킨 다음에 데이터를 처리하면, 위와 같이  지역, 담당자는 남고,  품목,하고 수량은 열로 나타 난다. 


그리고 반대로  되돌리기 위해서 행 쌓기는 spread 함수로 하는데, key 값은 품목으로 하고,  value 값을 수량으로 하면,  다시 되돌아 온다.  


설명상으로 간단하게 보이지만,   실제로 할려고 하면 잘 생각이 나지 않는 경우가 gather 및 spread 이다. 

 다시 행쌓기로 복원
      df1 %>% 
        spread(key= 품목, value = "수량")
## # A tibble: 45 × 41
##    지역  담당자 `1회용마스크` `1회용우의` 가제수건 검정장갑 결선장갑 귀마개
##    <chr> <chr>          <dbl>       <dbl>    <dbl>    <dbl>    <dbl>  <dbl>
##  1 A     구방현             0           0        0        0        0      0
##  2 A     조병익             0           0        0        0        0      0
##  3 B     이홍필             0           0        0        0        0      0
##  4 B     전민지           110           0        0        0       50    500
##  5 C     심흔섭             0           0        0        0        0      0
##  6 C     전경은             0           0        0        0        0      0
##  7 D     김성대             0           0        0        0        0      0
##  8 D     박지은             0           0        0        0        0      0
##  9 E     구자흥             0           0        0        0        0      0
## 10 E     정승관             0           0        0        0        0      0
## # … with 35 more rows, and 33 more variables: 그린1000 <dbl>, 란탄 <dbl>,
## #   란탄밧데리 <dbl>, 마스크카바 <dbl>, 면장갑 <dbl>, 면토시 <dbl>,
## #   밀링장갑 <dbl>, 반코팅 <dbl>, 발사개 <dbl>, 보온피스 <dbl>, 비누 <dbl>,
## #   썬크림 <dbl>, 안전모내피 <dbl>, 앞면두건 <dbl>, 올코팅 <dbl>,
## #   용접장갑 <dbl>, 원피스 <dbl>, 종이옷 <dbl>, 종이타올 <dbl>, 청색장갑 <dbl>,
## #   청앞치마 <dbl>, 취부장갑 <dbl>, 킴타올즈 <dbl>, 투피스 <dbl>,
## #   티그겸용 <dbl>, 티그장갑 <dbl>, 페인트마카 <dbl>, 포설장갑 <dbl>, …







댓글 없음:

댓글 쓰기

css cheat sheet 클래스 선택자, margin(마진), display , center 조정 간단한 구성 요소

 앞에서는 html의 간단한 sheet를 소개 하였습니다.   html은  주로 골격을 나타나는 것이라, 디자인을 하는데는 css로 하여야 합니다.  아래 코드와 같이 css 관련 하여 매우 간단하게 코딩 하겠습니다.  body 부분의 css 코딩  ...