R-Studio Dplyr Part.2

R-Studio의 Dplyr를 이용한 데이터 필터 Part.2

Featured image

R-Studio 의 정규식

SQL 처럼 다루게 해줍니다!

파일 소스

우클릭 -> 다른이름으로 링크저장 이용해 주세요
jumsu.csv
R정형데이터처리하기.xlsx
progbook.csv

함수 예제

# plyr 패키지와 dplyr 패키지를 사용하여 다음 문제를 풀어 보세요.
# plyr > dplyr 순서대로 불러와야 함
# library(plyr)
# library(dplyr)
  programming <- read.csv("progbook.csv", header = T)
  programming  
# between, top_n, case_when 문법도 사용해보기

# between
# filter(programing, between(컬럼, 하한값, 상한값)) qty가 5이상 7이하를 필터링
  filter(programming, between(qty, 5, 7))
    
# top_n : 상위 n개만 가져오기
# top_n(programming, 4, qty)
  top_n(programming, 4, qty)
  
# 하위 n개
  top_n(programming, -4, qty)
  
# case_when문법
# mutate( result = case_when( 조건1~내용, 조건2~내용2, ... TRUE ~ else내용))
# TRUE ~ 는 else 개념
# price가 12000이상은 high, 6000이상은 middle, 이하는 low로 표현
  userCon01 <- programming %>% mutate( case_when(price>=12000 ~ "high", price>=6000 ~ "middle", TRUE ~ "low"))
  userCon01
  
# 프로그램별 판매 수량의 합과 총 판매 금액을 구하세요.
  userCon <- programming %>% group_by(name) %>% summarise(판매수량=sum(qty, na.rm = T), 총금액=sum(qty*price, na.rm = T))
  userCon

# 프로그램별 최대 판매 수량과 최소 판매 금액을 구하세요.
  userCon02 <- programming %>% group_by(name) %>% summarise(최대판매수량=max(qty, na.rm = T), 최소판매금액=min(qty*price, na.rm = T))
  userCon02
  
# 년도별, 프로그램 최대 판매 수량과 최소 금액을 구하세요.
  userCon03 <- programming %>% group_by(year) %>% summarise(최대판매수량=max(qty, na.rm = T), 최소판매금액=min(qty*price, na.rm = T))
  userCon03
  
# 프로그램 판매 수량의 합과 비율을 구하세요.
# 비율 : 판매수량/전체판매수량
  userCon04 <- ddply(programming, .(name), transform, sumdata=sum(qty), per=qty/sum(qty))
  userCon04

콘솔 결과

> # plyr 패키지와 dplyr 패키지를 사용하여 다음 문제를 풀어 보세요.
> # plyr > dplyr 순서대로 불러와야 함
> # library(plyr)
> # library(dplyr)
>   programming <- read.csv("progbook.csv", header = T)
>   programming  
   year   name qty price
1  2000  C언어   6  5000
2  2000   자바   2  1000
3  2000    JSP   7  3500
4  2000 Python   9   900
5  2001  C언어  10  8000
6  2001   자바   7  3000
7  2001    JSP   3  2000
8  2001 Python  15  1500
9  2002  C언어  13 13000
10 2002   자바  10  5000
11 2002    JSP   5  4000
12 2002 Python  11  1100
> # between, top_n, case_when 문법도 사용해보기
> 
> # between
> # filter(programing, between(컬럼, 하한값, 상한값)) qty가 5이상 7이하를 필터링
>   filter(programming, between(qty, 5, 7))
  year  name qty price
1 2000 C언어   6  5000
2 2000   JSP   7  3500
3 2001  자바   7  3000
4 2002   JSP   5  4000
>     
> # top_n : 상위 n개만 가져오기
> # top_n(programming, 4, qty)
>   top_n(programming, 4, qty)
  year   name qty price
1 2001  C언어  10  8000
2 2001 Python  15  1500
3 2002  C언어  13 13000
4 2002   자바  10  5000
5 2002 Python  11  1100
>   
> # 하위 n개
>   top_n(programming, -4, qty)
  year  name qty price
1 2000 C언어   6  5000
2 2000  자바   2  1000
3 2001   JSP   3  2000
4 2002   JSP   5  4000
>   
> # case_when문법
> # mutate( result = case_when( 조건1~내용, 조건2~내용2, ... TRUE ~ else내용))
> # TRUE ~ 는 else 개념
> # price가 12000이상은 high, 6000이상은 middle, 이하는 low로 표현
>   userCon01 <- programming %>% mutate( case_when(price>=12000 ~ "high", price>=6000 ~ "middle", TRUE ~ "low"))
>   userCon01
   year   name qty price case_when(...)
1  2000  C언어   6  5000            low
2  2000   자바   2  1000            low
3  2000    JSP   7  3500            low
4  2000 Python   9   900            low
5  2001  C언어  10  8000         middle
6  2001   자바   7  3000            low
7  2001    JSP   3  2000            low
8  2001 Python  15  1500            low
9  2002  C언어  13 13000           high
10 2002   자바  10  5000            low
11 2002    JSP   5  4000            low
12 2002 Python  11  1100            low
>   
> # 프로그램별 판매 수량의 합과 총 판매 금액을 구하세요.
>   userCon <- programming %>% group_by(name) %>% summarise(판매수량=sum(qty, na.rm = T), 총금액=sum(qty*price, na.rm = T))
>   userCon
# A tibble: 4 x 3
  name   판매수량 총금액
  <fct>     <int>  <int>
1 C언어        29 279000
2 JSP          15  50500
3 Python       35  42700
4 자바         19  73000
> 
> # 프로그램별 최대 판매 수량과 최소 판매 금액을 구하세요.
>   userCon02 <- programming %>% group_by(name) %>% summarise(최대판매수량=max(qty, na.rm = T), 최소판매금액=min(qty*price, na.rm = T))
>   userCon02
# A tibble: 4 x 3
  name   최대판매수량 최소판매금액
  <fct>         <int>        <int>
1 C언어            13        30000
2 JSP               7         6000
3 Python           15         8100
4 자바             10         2000
>   
> # 년도별, 프로그램 최대 판매 수량과 최소 금액을 구하세요.
>   userCon03 <- programming %>% group_by(year) %>% summarise(최대판매수량=max(qty, na.rm = T), 최소판매금액=min(qty*price, na.rm = T))
>   userCon03
# A tibble: 3 x 3
   year 최대판매수량 최소판매금액
  <int>        <int>        <int>
1  2000            9         2000
2  2001           15         6000
3  2002           13        12100
>   
> # 프로그램 판매 수량의 합과 비율을 구하세요.
> # 비율 : 판매수량/전체판매수량
>   userCon04 <- ddply(programming, .(name), transform, sumdata=sum(qty), per=qty/sum(qty))
>   userCon04
   year   name qty price sumdata       per
1  2000  C언어   6  5000      29 0.2068966
2  2001  C언어  10  8000      29 0.3448276
3  2002  C언어  13 13000      29 0.4482759
4  2000    JSP   7  3500      15 0.4666667
5  2001    JSP   3  2000      15 0.2000000
6  2002    JSP   5  4000      15 0.3333333
7  2000 Python   9   900      35 0.2571429
8  2001 Python  15  1500      35 0.4285714
9  2002 Python  11  1100      35 0.3142857
10 2000   자바   2  1000      19 0.1052632
11 2001   자바   7  3000      19 0.3684211
12 2002   자바  10  5000      19 0.5263158