# 정렬
l data frame에서 data를 정렬하는 키워드
- order
l data정렬을 지원하는 패키지
> install.packages("doBy")
> library(doBy)
l 변환함수
1. as.numric()
2. as.character()
3. as.vector()
4. as.matrix()
5. as.data.frame()
6. as.factor()
7. as.logical()
8. as.Date()
n 활용 예제
>> 이름과 월급을 출력하는데 월급이 높은 사원부터 출력
> emp[order(sal,decreasing=T), c("ename","sal")] ename sal 9 KING 5000 15 JACK 3200 8 SCOTT 3000 13 FORD 3000 4 JONES 2975 6 BLAKE 2850 7 CLARK 2450 2 ALLEN 1600 …………………………………………..
>> 반대로 출력
> emp[order(sal,decreasing=F), c("ename","sal")] ename sal 1 SMITH 800 12 JAMES 950 11 ADAMS 1100 3 WARD 1250 5 MARTIN 1250 14 MILLER 1300 10 TURNER 1500 ………………………………………….. >
|
>> 이름과 입사일을 출력하는데 최근에 입사한 사원부터 출력
> emp[order(hiredate,decreasing=T), c("ename","sal","hiredate")] ename sal hiredate 11 ADAMS 1100 1987-05-23 8 SCOTT 3000 1987-04-19 14 MILLER 1300 1982-01-23 15 JACK 3200 1982-01-23 12 JAMES 950 1981-12-03 13 FORD 3000 1981-12-03 9 KING 5000 1981-11-17 5 MARTIN 1250 1981-09-28 …………………………………………..
|
>> 부서번호와 월급을 오름차순으로 출력하시오
> emp[order(deptno,sal,decreasing=F) , c("ename","deptno","sal")] ename deptno sal 14 MILLER 10 1300 7 CLARK 10 2450 9 KING 10 5000 1 SMITH 20 800 11 ADAMS 20 1100 4 JONES 20 2975 8 SCOTT 20 3000 ………………………………………….. 15 JACK 70 3200
>> deptno는 오름차순, sal은 내림차순 정렬
> emp[order(deptno,-sal) , c("ename","deptno","sal")] ename deptno sal 9 KING 10 5000 7 CLARK 10 2450 14 MILLER 10 1300 8 SCOTT 20 3000 13 FORD 20 3000 4 JONES 20 2975 11 ADAMS 20 1100 1 SMITH 20 800 …………………………………………..
|
n orderBy 함수 이용해서 data 정렬
> orderBy(~sal,emp[, c("empno","ename","sal") ]) empno ename sal 1 7369 SMITH 800 12 7900 JAMES 950 11 7876 ADAMS 1100 3 7521 WARD 1250 5 7654 MARTIN 1250 14 7934 MILLER 1300 10 7844 TURNER 1500 2 7499 ALLEN 1600 7 7782 CLARK 2450 ………………………………………….. |
>> 위의 직업이 SALESMAN인 사원들의 이름과 월급과 직업을 출력하는데 월급이 높은 사원부터 출력
> orderBy(~-sal,emp[job=='SALESMAN', c("empno","ename","sal") ]) empno ename sal 2 7499 ALLEN 1600 10 7844 TURNER 1500 3 7521 WARD 1250 5 7654 MARTIN 1250
|
- 위 엑셀파일을 다른이름으로 저장에서 csv파일로 cimre_day 파일명으로 저장한다
n crime_day.csv 파일 예제
> crime <- read.csv("crime_day.csv",header=TRUE)
>> 범죄유형, 요일을 출력하는데 일요일에 발생하는 범죄 건수가 높은 것부터 출력
> str(crime) 'data.frame': 16 obs. of 9 variables: $ 범죄유형: Factor w/ 16 levels "강력범죄","계",..: 2 1 11 14 12 15 13 6 8 16 ... $ 계 : Factor w/ 16 levels "1,262","1,391",..: 3 9 10 13 11 8 16 14 5 12 ... $ 일요일 : Factor w/ 16 levels "1,032","129",..: 8 9 10 12 7 5 14 13 1 4 ... $ 월요일 : Factor w/ 16 levels "12,853","175",..: 7 8 10 11 12 9 1 15 4 14 ... $ 화요일 : Factor w/ 16 levels "12,506","19",..: 7 8 10 11 12 9 1 15 4 13 ... $ 수요일 : Factor w/ 16 levels "12","12,091",..: 7 9 11 12 13 10 2 15 3 14 ... $ 목요일 : Factor w/ 16 levels "12,492","189",..: 4 7 10 11 12 8 1 15 6 13 ... $ 금요일 : Factor w/ 16 levels "12,671","171",..: 7 10 11 12 14 9 1 15 4 13 ... $ 토요일 : Factor w/ 16 levels "1,712","101",..: 8 10 12 13 9 5 15 14 1 6 ...
> orderBy(~-일요일,crime[, c("범죄유형","일요일") ]) 범죄유형 일요일 12 노동범죄 89 11 교통범죄 71,365 7 특별경제범죄 7,200 8 마약범죄 513 4 폭력범죄 47,711 15 병역범죄 445 3 절도범죄 40,168 2 강력범죄 3,793 1 계 215,700 5 지능범죄 21,334 13 안보범죄 21 6 풍속범죄 2,932 10 환경범죄 186 16 기타범죄 18,782 14 선거범죄 129 9 보건범죄 1,032
- 위처럼 숫자를 큰 순서대로 정렬하지 못하는 것을 확인할 수가 있는데 이것은 데이터 형이 factor 이기 때문에 level에 의해서 정렬되어 있기 때문이다 - 이것은 오라클의 데이터형 변환처럼 변환함수를 이용해야 한다 - 변환함수가 안된다면 숫자에 해당하는 셀을 드래그한 후 셀 서식에서 숫자로 변경해주고 다시 불러와야 한다
|
> crime <- read.csv("crime_day.csv",header=TRUE) > str(crime) 'data.frame': 15 obs. of 9 variables: $ 범죄유형: Factor w/ 15 levels "강력범죄","교통범죄",..: 1 10 13 11 14 12 5 7 15 2 ... $ 계 : int 25152 290460 312579 295101 24801 78155 4268 16800 3128 542784 ... $ 일요일 : int 3793 40168 47711 21334 2932 7200 513 1032 186 71365 ... $ 월요일 : int 3297 39237 39735 48950 3660 12853 626 2681 552 70692 ... $ 화요일 : int 3487 39930 43433 49910 3995 12506 637 2813 552 76466 ... $ 수요일 : int 3534 40306 42602 48604 3850 12091 623 2781 584 76301 ... $ 목요일 : int 3406 40576 42707 50237 3772 12492 684 3049 579 78722 ... $ 금요일 : int 3602 44051 45433 50556 3594 12671 649 2732 465 84446 ... $ 토요일 : int 4033 46192 50958 25510 2998 8342 536 1712 210 84792 ...
> orderBy(~-일요일,crime[, c("범죄유형","일요일") ]) 범죄유형 일요일 10 교통범죄 71365 3 폭력범죄 47711 2 절도범죄 40168 4 지능범죄 21334 15 기타범죄 18782 6 특별경제범죄 7200 1 강력범죄 3793 5 풍속범죄 2932 8 보건범죄 1032 7 마약범죄 513 14 병역범죄 445 9 환경범죄 186 13 선거범죄 129 11 노동범죄 89 12 안보범죄 21
|
>> 계를 빼고싶다면 아래처럼 테이블을 재 생성한다
> crime2 <- crime[crime$범죄유형!="계",c("범죄유형","일요일") ] > crime2[order(crime2$일요일,decreasing=T),c("범죄유형","일요일") ] 범죄유형 일요일 10 교통범죄 71365 3 폭력범죄 47711 2 절도범죄 40168 4 지능범죄 21334 15 기타범죄 18782 6 특별경제범죄 7200 1 강력범죄 3793 5 풍속범죄 2932 8 보건범죄 1032 7 마약범죄 513 14 병역범죄 445 9 환경범죄 186 13 선거범죄 129 11 노동범죄 89 12 안보범죄 21
|
'빅데이터과정 > 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 |