욱이의 냉철한 공부

[R, 전처리, 패키지] sqldf 패키지 이용하여 R에서 SQL을 사용하자 본문

데이터분석/R

[R, 전처리, 패키지] sqldf 패키지 이용하여 R에서 SQL을 사용하자

냉철한 욱 2021. 6. 22. 03:15

 

SQL에 익숙한 분들은,

 

R에서 데이터 처리를 위하여 새로운 함수들을 쓰는 것 보다

 

sqldf 패키지를 사용하여 SQL를 R에서 사용하여 데이터 처리를 하는 것이 편할 것이다.

 

그럼 어떻게 해야 하는지 알아보자~!


1. sqldf 패키지 다운받기.

install.packages("sqldf")

library(sqldf)

 

 

2. 기존 데이터 셋에 있는 Fruits 데이터로 실습.

- Fruits는 총 9행의 데이터 가지고 있다.

- Fruits 전체 데이터 가져오기

sqldf( 'SELECT * FROM Fruits')

 

 

- Fruit 값이 Oranges인 데이터 모두 조회하기 : WHERE 사용

sqldf( 'SELECT * FROM Fruits WHERE Fruit=\'Oranges\' ')

ORACLE에서와 차이는 WHERE절 안에 찾는 값의 입력 형식이다. => \'Oranges\'

 

- 출력되는 행 수 제한 : limit 사용

sqldf(' SELECT * FROM Fruits limit 2' )

 

- 정렬하기 : ORDER BY 사용

sqldf(' SELECT * FROM Fruits ORDER BY Profit' )

Profit 기준으로 오름차순 정렬

 

- 그룹함수 : 합계 SUM, 최대 MAX, 최소 MIN, 평균 AVG

sqldf(' SELECT SUM(Profit) FROM Fruits ')

sqldf(' SELECT max(Profit) FROM Fruits ')

sqldf(' SELECT min(Profit) FROM Fruits ')

sqldf(' SELECT AVG(Profit) FROM Fruits ')

sqldf(' SELECT Fruit , SUM(profit) FROM Fruits GROUP BY Fruit')

profit 대상

 

 

- 서브쿼리 : 단일 행, 여러 행

단일 행

sqldf(' SELECT * FROM Fruits WHERE Sales > (SELECT Sales FROM Fruits WHERE profit=15) ')

여러 행

sqldf(' SELECT * FROM Fruits WHERE Sales in( SELECT Sales FROM Fruits WHERE profit>15) ')

 

- JOIN : WHERE 사용, JOIN과 ON 사용, JOIN과 USING 사용

friend와 regioninfo라는 임의의 데이터프레임을 만들어서 실행해봤다.

WHERE 사용 : sqldf(' SELECT f.name , r.region FROM friend f , regioninfo r WHERE f.id=r.id ')

JOIN과 ON 사용 : sqldf(' SELECT f.name , r.region FROM friend f JOIN regioninfo r ON f.id=r.id ')

JOIN과 USING 사용 : sqldf(' SELECT f.name , r.region FROM friend f LEFT JOIN regioninfo r USING (id)')

 

- DML : UPDATE, DELETE

UPDATE : sqldf(c('UPDATE Fruits SET Sales=100 WHERE Fruit=\'Oranges\' AND Sales=93', 'SELECT * FROM Fruits'))

=> 6번 행의 Sales가 93에서 100으로 변경되었다는 것을 확인 할 수 있다.

 

 

 

DELETE : sqldf(c('DELETE FROM Fruits WHERE Fruit=\'Oranges\' AND Sales=93', 'SELECT * FROM Fruits') )

 

=> 기존의 6번 행이 삭제되었다는 것을 확인 할 수 있다.