2016/09/23 - [R] - [R. 아르] 리스트에 없는 항목만 추출하기 (차집합, setdiff()) 에서
잠시 sort() 함수가 나온 적이 있다.
예를 들어 다음과 같은 z를 순서대로 정렬해야 한다면
sort()를 사용하면 간단하다.
만일 내림차순으로 정렬하고 싶다면 [decreasing=] 옵션을 사용하자.
하지만 다음과 같은 데이터프레임은 sort()로 정렬하기가 난감하다.
y$var 를 sort()로 정렬할 수는 있겠지만, y전체가 정렬되지는 않는다.
이럴 때는 order()를 사용한다.
order()는 각 요소의 상대적인 순서를 반환한다.
order(y$var)를 보자.
(1)100 - (6)150 - (2)250 - (9)260 ... 과 같이 값을 순서대로 정렬한 후, 그 값이 원 데이터의 몇 번째에 존재하는지를 알려준다.
즉 y를 var에 따라 정렬하고 싶다면 1행, 6행, 2행, 9행... 의 순서로 배열하면 되는 것이다.
그러므로 y <- y[c(1,6,2,9,3,8,5,7,4),] 로 적으면 되겠고,
다시말해 y <- y[c(order(y$var)),] 로 적으면 된다.
행 번호가 거슬린다면 초기화해 주자.
order()는 알파벳이나 한글에 대하여도 잘 동작한다.
알파벳인 cat열에 따라 오름차순 정렬되었다.
cat에 따라 정렬한 후, var에 따라 정렬하려면 어떻게 할까?
두 개 이상의 인자에 따른 정렬은 다음과 같이 order() 안에 순서대로 적어 주면 된다.
cat은 오름차순 정렬한 뒤 var는 내림차순 정렬하려면?
[decreasing=T]를 사용할 경우 cat도 내림차순 정렬될 것이므로 까다롭다.
이럴 땐 숫자에 (-)를 곱해 더 큰 수가 더 작은 수가 되도록 만들어 주면 된다.
(-) 를 붙이면 반대가 되는 것을 볼 수 있다.
이를 이용하여
위와 같이 하면 cat은 오름차순, var는 내림차순으로 정렬할 수 있다.
문자를 내림차순 정렬하려면 어떻게 해야 할까?
예를 들어 다음과 같은 x에서
cat2열은 문자이므로 (-)를 곱해도 결과가 나오지 않는다.
이럴 땐 문자의 가치를 일단 숫자로 바꾸어 주는 것이 필요하다.
rank()를 사용하면 각 문자의 가치를 일련의 점수로 바꾸어 출력해 준다.
rank()가 "나"에는 5점, "다"에는 8점 등을 할당하였다.
이제 이 점수에 (-)를 곱해서 다음과 같이 표현하면 된다.
'R' 카테고리의 다른 글
[R.아르] 현재 날짜 가져오기 Sys.Date() (2) | 2016.10.04 |
---|---|
[R.아르] 객체 지우기 rm() / 특정 문자가 포함된 행 추출하기 grep() (0) | 2016.09.30 |
[R.아르] R의 작업 디렉토리Working Directory 변경하기 (0) | 2016.09.28 |
[R.아르] 찾아바꾸기(2) lapply() / if() (0) | 2016.09.26 |
[R.아르] 찾아바꾸기 gsub() (1) | 2016.09.26 |
[R.아르] R에서 피벗테이블 사용하기 dcast() (2) | 2016.09.23 |
[R. 아르] 리스트에 없는 항목만 추출하기 (차집합, setdiff()) (0) | 2016.09.23 |
[R. 아르] 내용 합치기 paste() (0) | 2016.09.22 |
[R.아르] 중복된 행 삭제하기 unique() / duplicated() (0) | 2016.09.12 |
[R.아르] 중복된 값의 개수 세기(엑셀의 countif) (1) | 2016.09.09 |
댓글