본문 바로가기

빅데이터과정/R

#47_140819_R_연산자

728x90

# 연산자




 

연산자의 종류 3가지


1.    산술 연산자

 + , - , * , / : 덧셈뺼샘곱셈나눗셈

%% : 나눈 나머지값

%/% : 나누기(나머지값을 버림)

> 5/2

[1] 2.5

> 5%%2

[1] 1

> 5%/%2

[1] 2

 

2.    비교 연산자

 > , < , >= , <= , == , !=


3.    논리 연산자

& : and (벡터화 된 연산)

&& : and (벡터화 되지 않은 연산)

 | : or (벡터화 된 연산)

 || : or (벡터화 되지 않은 연산)

 ! : not

 

 

오라클의 기타 비교 연산자를 R로 구현

 

오라클

R

in

%in%

like

grep

is null

is.na

between … and …

emp$sal >= 1000 & emp$sal <= 3000

 

  



데이터를 세로로 보는 package 설치

> install.packages("data.table")

> library(data.table)

 

 

 

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

 

 






  

 $ 기호 안붙이는 명령어


> 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$ 를 붙여줘야 한다

 





 

 

활용 예제


> 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

 

 

 

 


 





활용 예제


 

>> 직업이 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