13 min to read
R-Studio Dplyr Part.2
R-Studio의 Dplyr를 이용한 데이터 필터 Part.2
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
Comments