# 함수
l 함수의 종류
1. 문자
- toupper, tolower, substr, length
2. 숫자
- power
3. 날짜
- difftime, Sys.Date()
4. 변환
- as.numric(), as.character(), as.vector(), as.matrix(), as.data.frame(), as.factor(), as.logical(), as.Date()
5. 일반
- ifelse
6. 원리
- emp[행 , 열 ] : emp data frame에서 특정행과 열을 조회
- data.frame( ) : data.frame(vector, vector, vector)
l as.difftime
- units = (days,mins,hours,weeks)
-
l ls()
- 어떤 변수가 존재하는지 출력
n 함수 활용 예제
>> 이름과 직업을 소문자로 출력
> data.frame(tolower(emp$ename),tolower(emp$job)) tolower.emp.ename. tolower.emp.job. 1 smith clerk 2 allen salesman 3 ward salesman 4 jones manager 5 martin salesman 6 blake manager 7 clark manager 8 scott analyst ……………………………………..
> data.frame(ename=tolower(emp$ename),job=tolower(emp$job)) ename job 1 smith clerk 2 allen salesman 3 ward salesman 4 jones manager ……………………………………..
|
>> 이름이 scott인 사원의 이름과 월급을 출력하는데 scott을 소문자로 코딩해서 결과 출력
> emp[tolower(emp$ename)=='scott',c("ename","sal" ) ] ename sal 8 SCOTT 3000
|
>> 이름과 입사한 날짜부터 오늘까지 총 몇일 근무했는지 출력하시오
> data.frame(ename=emp$ename, days=Sys.Date()-as.Date(emp$hiredate)) ename days 1 SMITH 12298 days 2 ALLEN 12233 days 3 WARD 12231 days 4 JONES 12192 days 5 MARTIN 12013 days 6 BLAKE 12163 days 7 CLARK 12124 days 8 SCOTT 9984 days 9 KING 11963 days 10 TURNER 12033 days 11 ADAMS 9950 days 12 JAMES 11947 days 13 FORD 11947 days 14 MILLER 11896 days 15 JACK 11896 days
|
>> 내일 날짜를 출력
> Sys.Date() + 1 [1] "2014-08-21"
|
>> 오늘부터 4주후의 날짜 출력
> Sys.Date() + as.difftime(4,units="weeks") [1] "2014-09-17"
|
>> 100달 뒤의 날짜 출력
> Sys.Date() + as.difftime(400,units="weeks") [1] "2022-04-20" - ?difftime을 쳐보면 월단위로 측정할 수는 없다
|
>> 오늘이 무슨요일인지 출력
> format(Sys.Date(), "%A") [1] "수요일"
|
>> 이름, 월급, 등급을 출력하는데 월급이 1500 이상이면 A를 출력하고 아니면 B 출력
> data.frame(ename=emp$ename,sal=emp$sal,grade=ifelse(emp$sal>=1500,'A','B')) ename sal grade 1 SMITH 800 B 2 ALLEN 1600 A 3 WARD 1250 B 4 JONES 2975 A 5 MARTIN 1250 B …………………………………….
|
>> 이름, 부서번호, 부서위치를 출력하는데 부서번호가 10번이면 NEW YORK, 20번이면 DALLAS, 30번이면 CHICAGO로 하고 나머지 부서번호면 NO LOCK란 글씨 출력
ifelse(emp$deptno==10,'NEW YORK', (ifelse(emp$deptno==20,'DALLAS', (ifelse(emp$deptno==30,'CHICAGO','NO LOCK')))))
> loc <- ifelse(emp$deptno==10,'NEW YORK', (ifelse(emp$deptno==20,'DALLAS', (ifelse(emp$deptno==30,'CHICAGO','NO LOCK'))))) > data.frame(emp$ename, emp$deptno, loc) emp.ename emp.deptno loc 1 SMITH 20 DALLAS 2 ALLEN 30 CHICAGO 3 WARD 30 CHICAGO 4 JONES 20 DALLAS 5 MARTIN 30 CHICAGO 6 BLAKE 30 CHICAGO 7 CLARK 10 NEW YORK 8 SCOTT 20 DALLAS 9 KING 10 NEW YORK 10 TURNER 30 CHICAGO 11 ADAMS 20 DALLAS 12 JAMES 30 CHICAGO 13 FORD 20 DALLAS 14 MILLER 10 NEW YORK 15 JACK 70 NO LOCK
|
>> 이름, 월급, 커미션을 출력하는데 카미션이 null인 사원들은 0 출력
> ifelse(is.na(emp$comm),0,emp$comm) [1] 0 300 500 0 1400 0 0 0 0 0 0 0 0 0 0 > ifelse(complete.cases(emp$comm),emp$comm,0) [1] 0 300 500 0 1400 0 0 0 0 0 0 0 0 0 0 > ncomm <- ifelse(complete.cases(emp$comm),emp$comm,0) > data.flame(emp$ename,emp$sal,ncomm) 에러: 함수 "data.flame"를 찾을 수 없습니다 > data.frame(emp$ename,emp$sal,ncomm) emp.ename emp.sal ncomm 1 SMITH 800 0 2 ALLEN 1600 300 3 WARD 1250 500 4 JONES 2975 0 5 MARTIN 1250 1400 6 BLAKE 2850 0 7 CLARK 2450 0 8 SCOTT 3000 0 …………………………………….
|
>> 내일 날짜를 출력
> Sys.Date() + 1 [1] "2014-08-21"
|
>> 오늘부터 4주후의 날짜 출력
> Sys.Date() + as.difftime(4,units="weeks") [1] "2014-09-17"
|
>> 100달 뒤의 날짜 출력
> Sys.Date() + as.difftime(400,units="weeks") [1] "2022-04-20" - ?difftime을 쳐보면 월단위로 측정할 수는 없다
|
>> 오늘이 무슨요일인지 출력
> format(Sys.Date(), "%A") [1] "수요일"
|
>> 이름, 월급, 등급을 출력하는데 월급이 1500 이상이면 A를 출력하고 아니면 B 출력
> data.frame(ename=emp$ename,sal=emp$sal,grade=ifelse(emp$sal>=1500,'A','B')) ename sal grade 1 SMITH 800 B 2 ALLEN 1600 A 3 WARD 1250 B 4 JONES 2975 A 5 MARTIN 1250 B …………………………………….
|
>> 이름, 부서번호, 부서위치를 출력하는데 부서번호가 10번이면 NEW YORK, 20번이면 DALLAS, 30번이면 CHICAGO로 하고 나머지 부서번호면 NO LOCK란 글씨 출력
ifelse(emp$deptno==10,'NEW YORK', (ifelse(emp$deptno==20,'DALLAS', (ifelse(emp$deptno==30,'CHICAGO','NO LOCK')))))
> loc <- ifelse(emp$deptno==10,'NEW YORK', (ifelse(emp$deptno==20,'DALLAS', (ifelse(emp$deptno==30,'CHICAGO','NO LOCK'))))) > data.frame(emp$ename, emp$deptno, loc) emp.ename emp.deptno loc 1 SMITH 20 DALLAS 2 ALLEN 30 CHICAGO 3 WARD 30 CHICAGO 4 JONES 20 DALLAS 5 MARTIN 30 CHICAGO 6 BLAKE 30 CHICAGO 7 CLARK 10 NEW YORK 8 SCOTT 20 DALLAS 9 KING 10 NEW YORK 10 TURNER 30 CHICAGO 11 ADAMS 20 DALLAS 12 JAMES 30 CHICAGO 13 FORD 20 DALLAS 14 MILLER 10 NEW YORK 15 JACK 70 NO LOCK
|
>> 이름, 월급, 커미션을 출력하는데 카미션이 null인 사원들은 0 출력
> ifelse(is.na(emp$comm),0,emp$comm) [1] 0 300 500 0 1400 0 0 0 0 0 0 0 0 0 0 > ifelse(complete.cases(emp$comm),emp$comm,0) [1] 0 300 500 0 1400 0 0 0 0 0 0 0 0 0 0 > ncomm <- ifelse(complete.cases(emp$comm),emp$comm,0) > data.flame(emp$ename,emp$sal,ncomm) 에러: 함수 "data.flame"를 찾을 수 없습니다 > data.frame(emp$ename,emp$sal,ncomm) emp.ename emp.sal ncomm 1 SMITH 800 0 2 ALLEN 1600 300 3 WARD 1250 500 4 JONES 2975 0 5 MARTIN 1250 1400 6 BLAKE 2850 0 7 CLARK 2450 0 8 SCOTT 3000 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 |