728x90

# R : 접속할 때마다 아래와 같이 수행

emp <- read.csv ("emp.csv", header=TRUE)
emp

emp.csv 파일을 읽어서 컬럼 포함하여 emp라는 변수에 집어 넣어라

 

이름, 월급, 직업을 출력하시오

emp[ , c("ename","sal","job")]

[행, 열c()] / 행에 조건을 주지 않아서 emp 테이블 전체 출력

 

직업과 입사일과 부서번호와 월급을 출력하시오

emp[ , c("job","hiredate","deptno","sal")]

 

월급이 3000 이상인 사원들의 이름과 월급을 출력하시오

emp[ emp$sal>=3000, c("ename","sal")]

행 조건 - emp$

 

직업이 SALESMAN인 사원들의 이름과 직업을 출력하시오

emp[ emp$job=='SALESMAN', c("ename","job")]

=를 두 번 써야 함

 

81년 11월 17일에 입사한 사원들의 이름과 입사일을 출력하시오

emp [ emp$hiredate=='1981-11-17 0:00', c("ename","hiredate")]

 

직업이 SALESMAN이고 월급이 1000 이상인 사원들의 이름과 월급과 직업을 출력하시오

emp [ emp$job=='SALESMAN' & emp$sal>=1000, c("ename", "sal", "job")]



월급이 1000에서 3000 사이인 사원들의 이름과 월급을 출력하시오 /* between and */

emp [emp$sal>=1000 & emp$sal<=3000, c("ename", "sal")]

 

커미션이 null인 사원들의 이름과 월급과 커미션을 출력하시오 /* null -> is.na */

emp [is.na(emp$comm), c("ename","sal", "comm")]

 

mgr이 null인 사원의 이름과 직업과 mgr을 출력하시오

emp [is.na(emp$mgr), c("ename","job", "mgr")]

 

커미션이 null이 아닌 사람들의 이름과 커미션을 출력하시오 /* is not null => complete.cases */

emp [complete.cases(emp$comm), c("ename", "comm")]

 

직업이 SALESMAN, ANALYST인 사원들의 이름과 직업을 출력하시오

emp [emp$job %in% c('SALESMAN', 'ANALYST'), c("ename", "job")]

c ~> vecter(크기와 방향으로 정해지는 양)를 표시할 때 쓰는 문법

 

직업이 SALESMAN, ANALYST가 아닌 사원들의 이름과 직업을 출력하시오

emp [!emp$job %in% c('SALESMAN', 'ANALISTY'), c("ename", "job")] /* not ! */

 

이름의 첫 글자가 A로 시작하는 사원들의 이름과 월급을 출력하시오 /* like */

emp[grep("^A,*",emp$ename), c("ename", "sal")]

^ : 첫 번째

* : 오라클의 wild card(%)를 의미한다, 무엇이 와도 상관이 없다

 

* 문자함수 tolower, toupper

이름과 직업을 출력하는데 이름은 대문자로 출력하고, 직업은 소문자로 출력하시오 /* 함수 */

install.packages("sqldf")
data.frame(toupper(emp$ename), tolower(emp$job))

 

이름이 scott인 사원의 이름과 월급을 출력하는데 scott을 소문자로 비교해도 조회가 될 수 있도록 하시오

emp[tolower(emp$ename)=='scott', c("ename", "sal")]

 

이름의 첫 번째 철자만 출력하시오

substr(emp$ename,1,1)

Tip. 세로로 보고 싶다면

data.frame( substr(emp$ename,1,1) )

 

* 날짜함수 구현방법 difftime

 

오늘 날짜를 출력하시오

Sys.Date()

 

내일 날짜를 출력하시오

Sys.Date() + as.difftime(1,units="days")

days, weeks 사용 가능

 

오늘부터 2주 후의 날짜를 출력하시오

Sys.Date() + as.difftime(2,units="weeks")

 

이름, 입사한 날짜부터 오늘까지 총 며칠 근무 했는지 출력하시오

Sys.Date() - emp$hiredate
str(emp)

hiredate : Facter ( 특정값 )

-

Sys.Date() - as.Date(emp$hiredate)

* as.Date : 날짜로 형변환하는 함수

-

td <- Sys.Date() - as.Date(emp$hiredate)
cbind( emp, sen=as.difftime(td, units="days")) [, c("ename","sen")]

             // [] => 앞의 결과 중 이 조건들만 가져와라

* cbind : 여러 개의 컬럼값들을 하나로 출력 - 컬럼들을 묶는 함수

 

위의 문법을 다시 출력하는데 월급이 3000 이상인 사원들의 이름과 월급과 총 근무한 일 수를 출력하시오

cbind( emp, sen=as.difftime(td, units="days")) [ emp$sal>=3000, c("ename","sal","sen")] 

 

1981년에 입사한 사원들의 이름과 입사일을 출력하시오

emp[as.Date(emp$hiredate) >= '1981-01-01' & as.Date(emp$hiredate) <= ''1981-12-31', c("ename", "hiredate")]

 

* 일반함수

1. nvl

2. decode

3. case

 

이름과 커미션을 출력하는데 커미션이 null인 사원들은 0으로 출력하시오

install.packages("data.table") // 보여줄 data를 테이블화해서 보여주는 함수
library("data.table")
data.table(emp$ename, ifelse(complete. cases(emp$comm), emp$comm,0)) // error

 

이름, 월급, 보너스를 출력하는데 월급이 3000 이상이면 보너스를 900으로 출력하고, 월급이 1000 이상이면 보너스를 500으로 출력하고 나머지 월급은 0으로 출력하시오

data.table(emp$ename, emp$sal, ifelse(emp$sal>=3000, 900, ifelse(emp$sal>=1000, 500, 0)))

 

* R에서의 group 함수

max, min, sum, mean(평균), length(count) 

 

최대 월급을 출력하시오

max(emp$sal)

 

최대 월급, 최소 월급, 토탈 월급을 출력하시오

data.table(max(emp$sal), min(emp$sal), sum(emp$sal))
cbind(max(emp$sal), min(emp$sal), sum(emp$sal))

 

직업, 직업별 최대 월급을 출력하시오

data.table(emp) [,max(sal), by=job]

data.table(emp) // emp 테이블이 나옴

 

위의 결과에서 직업이 SALESMAN인 것만 출력하시오

data.table(emp) [emp$job=="SALESMAN", max(sal), by=job]

 

부서번호와 부서번호별 토탈 월급을 출력하는데 부서번호가 30번인 것만 출력하시오

data.table(emp) [emp$deptno=="30", sum(sal), by=deptno]
728x90