본문 바로가기

빅데이터과정/R

#47_140819_R_정렬

728x90

# 정렬




 

data frame에서 data를 정렬하는 키워드

order

 



data정렬을 지원하는 패키지

> install.packages("doBy")

> library(doBy)

 



변환함수

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()

 

 

 

 

활용 예제


 

>> 이름과 월급을 출력하는데 월급이 높은 사원부터 출력

 

> 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

…………………………………………..

 

 

 




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

 

 

 




crime_day.xlsx


  • 위 엑셀파일을 다른이름으로 저장에서 csv파일로 cimre_day 파일명으로 저장한다




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