# 연산자
l 연산자의 종류 3가지
1. 산술 연산자
- + , - , * , / : 덧셈, 뺼샘, 곱셈, 나눗셈
- %% : 나눈 나머지값
- %/% : 나누기(나머지값을 버림)
> 5/2 [1] 2.5 > 5%%2 [1] 1 > 5%/%2 [1] 2 |
2. 비교 연산자
- > , < , >= , <= , == , !=
3. 논리 연산자
- & : and (벡터화 된 연산)
- && : and (벡터화 되지 않은 연산)
- | : or (벡터화 된 연산)
- || : or (벡터화 되지 않은 연산)
- ! : not
l 오라클의 기타 비교 연산자를 R로 구현
오라클 | R |
in | %in% |
like | grep |
is null | is.na |
between … and … | emp$sal >= 1000 & emp$sal <= 3000 |
l 데이터를 세로로 보는 package 설치
- > install.packages("data.table")
- > library(data.table)
l SQL 쿼리를 쓰기 위한 package 설치
> install.packages("sqldf")
installing the dependencies ‘gsubfn’, ‘proto’, ‘RSQLite’, ‘RSQLite.extfuns’, ‘DBI’, ‘chron’
URL 'http://cran.nexr.com/bin/windows/contrib/3.1/gsubfn_0.6-5.zip'을 시도합니다 Content type 'application/zip' length 658600 bytes (643 Kb) URL을 열었습니다 downloaded 643 Kb
URL 'http://cran.nexr.com/bin/windows/contrib/3.1/proto_0.3-10.zip'을 시도합니다
………………………………………
> library(sqldf) 필요한 패키지를 로딩중입니다: gsubfn 필요한 패키지를 로딩중입니다: proto 필요한 패키지를 로딩중입니다: RSQLite 필요한 패키지를 로딩중입니다: DBI 필요한 패키지를 로딩중입니다: RSQLite.extfuns
> sqldf("select ename,sal from emp where sal >= 3000") Loading required package: tcltk ename sal 1 SCOTT 3000 2 KING 5000 3 FORD 3000 4 JACK 3200
|
> data.table(unique(emp$deptno)) V1 1: 20 2: 30 3: 10 4: 70 |
n $ 기호 안붙이는 명령어
> attach(emp) > sal [1] 800 1600 1250 2975 1250 2850 2450 3000 5000 1500 1100 950 3000 1300 3200 > detach(emp) > sal 에러: 객체 'sal'를 찾을 수 없습니다 > emp$sal [1] 800 1600 1250 2975 1250 2850 2450 3000 5000 1500 1100 950 3000 1300 3200 - attache를 쓰면 sal만 쓰면 되지만 detach를 통해 해제하면 emp$ 를 붙여줘야 한다 |
n 활용 예제
> c(T,T,T) | c(T,F,F) [1] TRUE TRUE TRUE > c(T,T,T) & c(T,F,F) [1] TRUE FALSE FALSE
> c(T,T,T) && c(T,F,F) [1] TRUE - 벡터화 되지 않은 연산이므로 첫번째 값만 비교
|
>> emp에서 ename, sal 출력
> emp[ , c("ename","sal")] ename sal 1 SMITH 800 2 ALLEN 1600 3 WARD 1250 4 JONES 2975 5 MARTIN 1250 6 BLAKE 2850 7 CLARK 2450 8 SCOTT 3000 9 KING 5000 10 TURNER 1500 11 ADAMS 1100 12 JAMES 950 13 FORD 3000 14 MILLER 1300 15 JACK 3200
|
>> 월급이 1000에서 3000사이인 사원의 이름과 월급을 출력
> emp[emp$sal>=1000 & emp$sal<=3000, c("ename","sal")] ename sal 2 ALLEN 1600 3 WARD 1250 4 JONES 2975 5 MARTIN 1250 6 BLAKE 2850 7 CLARK 2450 8 SCOTT 3000 10 TURNER 1500 11 ADAMS 1100 13 FORD 3000 14 MILLER 1300
|
>> 직업이 ANALYST 가 아닌 사원의 이름과 직업과 월급을 출력
> emp[ emp$job!='ANALYST',c("ename","job","sal")] ename job sal 1 SMITH CLERK 800 2 ALLEN SALESMAN 1600 3 WARD SALESMAN 1250 4 JONES MANAGER 2975 5 MARTIN SALESMAN 1250 6 BLAKE MANAGER 2850 7 CLARK MANAGER 2450 9 KING PRESIDENT 5000 10 TURNER SALESMAN 1500 11 ADAMS CLERK 1100 12 JAMES CLERK 950 14 MILLER CLERK 1300 15 JACK CLERK 3200
|
>> 81년 9월 8일에 입사한 사원들의 이름과 입사일 출력
> emp[emp$hiredate=='1981-09-08',c("ename","hiredate")] ename hiredate 10 TURNER 1981-09-08
|
>> 중복제거 출력
> unique(emp$job) [1] CLERK SALESMAN MANAGER ANALYST PRESIDENT Levels: ANALYST CLERK MANAGER PRESIDENT SALESMAN
|
n 활용 예제
>> 직업이 SALESMAN, ANALYST인 사원들의 이름과 월급 출력
> emp[job %in% c('SALESMAN', 'ANALYST'), c("ename","job")] ename job 2 ALLEN SALESMAN 3 WARD SALESMAN 5 MARTIN SALESMAN 8 SCOTT ANALYST 10 TURNER SALESMAN 13 FORD ANALYST
|
>> 직업이 SALESMAN, ANALYST이 아닌 사원들의 이름과 월급 출력
> emp[ ! job %in% c('SALESMAN', 'ANALYST'), c("ename","job")] ename job 1 SMITH CLERK 4 JONES MANAGER 6 BLAKE MANAGER 7 CLARK MANAGER 9 KING PRESIDENT 11 ADAMS CLERK 12 JAMES CLERK 14 MILLER CLERK 15 JACK CLERK
|
>> 이름의 첫번째 철자가 A로 시작하는 사원의 이름과 월급 출력
> emp[grep("^A.*",ename), c("ename","sal")] - ^ : 첫번째 글자를 의미 - * : 오라클에서 와일드카드(%)를 의미한다 - . : 구분하는 기호 - $ : 끝에 있는 글자 ename sal 2 ALLEN 1600 11 ADAMS 1100
|
>> 이름의 첫번째 글자가 KI로 시작하는 사원의 이름과 월급 출력
> emp[grep("^KI.*",ename), c("ename","sal")] ename sal 9 KING 5000
|
>> 이름의 끝 글자가 T로 끝나는 사원들의 이름 출력
> emp[grep("*.T$",ename), c("ename") ] [1] SCOTT
|
>> 커미션이 null 인 사원들의 이름과 월급과 커미션을 출력
> emp[is.na(emp$comm) , c("ename","job","comm") ] ename job comm 1 SMITH CLERK NA 4 JONES MANAGER NA 6 BLAKE MANAGER NA 7 CLARK MANAGER NA 8 SCOTT ANALYST NA 9 KING PRESIDENT NA 11 ADAMS CLERK NA 12 JAMES CLERK NA 13 FORD ANALYST NA 14 MILLER CLERK NA 15 JACK CLERK NA
|
>> 커미션이 null이 아닌 사원들의 이름과 월급과 커미션을 출력
> emp[ ! is.na(emp$comm) , c("ename","job","comm") ] ename job comm 2 ALLEN SALESMAN 300 3 WARD SALESMAN 500 5 MARTIN SALESMAN 1400 10 TURNER SALESMAN 0
> emp[complete.cases(emp$comm), c("ename","job","comm")] - complete 구문 : null 아닌 완전한 값을 찾는다 ename job comm 2 ALLEN SALESMAN 300 3 WARD SALESMAN 500 5 MARTIN SALESMAN 1400 10 TURNER SALESMAN 0
|
'빅데이터과정 > R' 카테고리의 다른 글
#48_140821_R_JOIN (0) | 2014.08.21 |
---|---|
#48_140821_R_GROUP 함수 (1) | 2014.08.21 |
#47_140819_R_함수 (0) | 2014.08.19 |
#47_140819_R_정렬 (0) | 2014.08.19 |
#47_140819_R_R의 기본 (0) | 2014.08.19 |