# 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]
'Dev > Lecture Backup' 카테고리의 다른 글
DB 구조와 관리 1 중간고사 시험 범위 정리 (oracle SQL 문제) : 140418 (0) | 2019.04.22 |
---|---|
DB 구조와 관리 1 중간고사 시험 범위 정리 (oracle SQL) : 140416 (2) | 2019.04.22 |
140609 DB 구조와 관리 1 (11) (0) | 2019.04.22 |
140602 DB 구조와 관리 1 (10) (0) | 2019.04.22 |