Christopher DuBois
그는 물었다 11년 전
1,263

여러 사람이 어떻게 다테프라임 정렬하려면 열 (s)

난 로렌아줌마가 다다드프라임 정렬하려면 여러 사람이 열. 예를 들어, 아래에 있는 다다드프라임 싶다 '' b 'z' (내림차순을) 을 열별 정렬하려면 열별 (올림차순):

dd <- data.frame(b = factor(c("Hi", "Med", "Hi", "Low"), 
      levels = c("Low", "Med", "Hi"), ordered = TRUE),
      x = c("A", "D", "A", "C"), y = c(8, 3, 9, 9),
      z = c(1, 1, 1, 2))
dd
    b x y z
1  Hi A 8 1
2 Med D 3 1
3  Hi A 9 1
4 Low C 9 2

답변 19 개

['주문 ()'] 기능을 사용할 수 있습니다 (http://stat.ethz.ch/R-manual/R-devel/library/base/html/order.html) 에 의존하지 않고 직접 사용하는 것이 바로 이 슬라이드에서는 오토메이티드 간단해진다는 추가 도구 - 맨 위에 '예 (주문)' 코드:

R> dd[with(dd, order(-z, b)), ]
    b x y z
4 Low C 9 2
2 Med D 3 1
1  Hi A 8 1
3  Hi A 9 1

  • 일부 2+개의 금지되나니 편집하십시오 later:* 그냥 이렇게 방법을 묻는 열별 색인입니다. 답은 '열 (s) 를 반드시 필요한 단순히 정렬 순서 ()' 기능을:

R> dd[order(-dd[,4], dd[,1]), ]
    b x y z
4 Low C 9 2
2 Med D 3 1
1  Hi A 8 1
3  Hi A 9 1
R> 

열의 이름을 사용하지 않고 (() '와' 로 더 쉽게 / direct access).

MusTheDataGuy
Jota
그는 8년 전 댓글을 달았습니다
0

간단한 방법 호환표 @dirk 에드델부텔 partnernet 있나요?

Dirk Eddelbuettel
그는 8년 전 댓글을 달았습니다
13

같은 방법으로 노력해야 할 수 있지만, t # 39 can& 사용 '을 (를)'. "M" 시도하시겠습니까 < - 매트릭스 (c (1.2,2.2,3.6,4.5), 4, 2, 비로프 = FALSE, 디미나미스 = 목록 (nulll, c (&quot a&quot b&quot ";;;))) ',' 매트릭스 'M' 만드는 데 사용할 M [주문 (M [, &quot, a&quot,], - M [, &quot b";])] '에서 이 오더하려면 2 열.

hertzsprung
그는 8년 전 댓글을 달았습니다
0

대신 이 오더하려면 열 색인입니다 의해 열 이름을 따라 어떻게 해야 합니까?

Dirk Eddelbuettel
그는 8년 전 댓글을 달았습니다
4

참 쉽다. 'dd [순서 (dd dd [, 4], [, 1])]', 't' 를 함께 사용할 수 있지만, # 39 can& 이름 기반 서브세팅.

Nailgun
그는 8년 전 댓글을 달았습니다
18

나는 잘못된 인수를 &quot 단항 operator"; 오류 실행하면서도 두 번째 예제.

René Nyffenegger
그는 6년 전 댓글을 달았습니다
0

그 이유는 빈 매개변수입니다 (',]') 필요한 건가요?

Dirk Eddelbuettel
그는 6년 전 댓글을 달았습니다
0
    • 모든 열 중 선택할 수 있기 때문에 이차원 R 데이터 구조.
HattrickNZ
그는 6년 전 댓글을 달았습니다
0

왜 'dd [순서 (dd [, 4],]' 적합하지 않은 또는 & # 39, dd [순서 (dd [, 4]] & # 39. 기본적으로 필요한 dd [, 1] '는' 왜? [, 4] '는' dd 충분하지 않은 경우 그냥 정렬하려면 1 열?

Richie Cotton
그는 5년 전 댓글을 달았습니다
18

이 잘못된 인수를 &quot 단항 operator"; 마이너스 문자로 사용할 때 오류가 발생하는 열. 예를 들어 ',' it '이 열에 의해 pardiso 랩할 스테프라마 dd [순서 (스테프라마 (dd [, 4]), dd [, 1])]'.

dasf
그는 3년 전 댓글을 달았습니다
0

나는 내 df 는 비슷한 문제에 의해 정렬할지 20+ 제외한 각 열과 해야 하나. (예를 들어, 'R&gt 아웃해야 하나씩 열 이름을 쓸 수 있어요 dd [함께 (dd, 주문 (a, b,c, .,z)),]) ', 하지만 난 # 39 의 보다 간편하게 there& 것인지 궁금하다. 이것은 하나의 개체를 결합 '주문' 에 인수를 위해 가능하면 20 대?

선택할 수 있습니다

  • '기본' 주문 '에서 배열합니다 드프리르 '에서' - ' 세트러더 세트러더프 데이타스터블 '' 에서 '와' - ' 배열합니다 프라이어 '에서' - ' 정렬하려면 다리프스 '에서' - ' '에서' - '러더비 도비 조르다타 데듀시르 '에서' - '

대부분의 시간을 갖는 '또는' 한 '이' 드프리르 콩지름에 데이타스터블 솔루션을 사용하여 '인데,' 기본 오더할 아니 종속물과의 중요하다.

-

난 최근에 추가된 패키지 수 있기 때문에 소t.다다드프라임 크랑 클래스용 호환적 설명한 바와 같이 있습니다. https://stackoverflow.com/questions/6836963/best-way-to-create-generic-method-consistency-for-sort-data-frame

따라서 다음과 같이 주어진 다다드프라임 dd 정렬할 수 있습니다.

dd <- data.frame(b = factor(c("Hi", "Med", "Hi", "Low"), 
      levels = c("Low", "Med", "Hi"), ordered = TRUE),
      x = c("A", "D", "A", "C"), y = c(8, 3, 9, 9),
      z = c(1, 1, 1, 2))
library(taRifx)
sort(dd, f= ~ -z + b )

이 함수의 경우, 원래 한 작가, 제발 연락 부탁드립니다. 토론으로 도메니니스 바로 여기에 있다. http://chat.stackoverflow.com/transcript/message/1094290 # 1094290

-

'기능을 사용할 수도 있습니다 ()' 에서 '위' 를 해들리 배열합니다 프라이어 스레드할 지적했다.

library(plyr)
arrange(dd,desc(z),b)

-

벤치마크: 참고로 난 이후 각 패키지당 로드되었는지 새 R 세션용으로 많은 갈등이 있었다. 특히 이 도비 패키지 '가' 로드중 정렬하려면 반환되기를 &quot 마스킹됨 & # 39 객체에는) 가, 다음, & # 39, x (포지셔닝하십시오 (17): b, x, y, 패키지 '는' 에서 케빈 라이트, 로딩 z&quot 데듀시르 덮어씁니다 소t.다다드프라임 또는 다리프스 패키지.

#Load each time
dd <- data.frame(b = factor(c("Hi", "Med", "Hi", "Low"), 
      levels = c("Low", "Med", "Hi"), ordered = TRUE),
      x = c("A", "D", "A", "C"), y = c(8, 3, 9, 9),
      z = c(1, 1, 1, 2))
library(microbenchmark)

# Reload R between benchmarks
microbenchmark(dd[with(dd, order(-z, b)), ] ,
    dd[order(-dd$z, dd$b),],
    times=1000
)

마드얀의 시간:

'dd [함께 (dd, 주문 (z, b))]' 778

'dd [순서 (z, dd $ $ dd b),]' 788

library(taRifx)
microbenchmark(sort(dd, f= ~-z+b ),times=1000)

마드얀의 시간: 1,567

library(plyr)
microbenchmark(arrange(dd,desc(z),b),times=1000)

마드얀의 시간: 862

library(doBy)
microbenchmark(orderBy(~-z+b, data=dd),times=1000)

마드얀의 시간: 1,694

단, 도비 좋은 시간 걸리는 약어입니다 로드하기에 숨겨요.

library(Deducer)
microbenchmark(sortData(dd,c("z","b"),increasing= c(FALSE,TRUE)),times=1000)

39, t make 데듀시르 couldn& 로드. 요구사항뿐 제리 콘솔이군요.

esort <- function(x, sortvar, ...) {
attach(x)
x <- x[with(x,order(sortvar,...)),]
return(x)
detach(x)
}

microbenchmark(esort(dd, -z, b),times=1000)

39 doesn& 호환되어야 부착합니다 마이크로벤크마크 것으로 인해, t / 분리하십시오.

-

m <- microbenchmark(
  arrange(dd,desc(z),b),
  sort(dd, f= ~-z+b ),
  dd[with(dd, order(-z, b)), ] ,
  dd[order(-dd$z, dd$b),],
  times=1000
  )

uq <- function(x) { fivenum(x)[4]}  
lq <- function(x) { fivenum(x)[2]}

y_min <- 0 # min(by(m$time,m$expr,lq))
y_max <- max(by(m$time,m$expr,uq)) * 1.05

p <- ggplot(m,aes(x=expr,y=time)) + coord_cartesian(ylim = c( y_min , y_max )) 
p + stat_summary(fun.y=median,fun.ymin = lq, fun.ymax = uq, aes(fill=expr))

! [마이크로벤크마크 플롯할] [1]

(,) 은 어퍼 사분위수 충스러웠으니 쇱そ 사분위수 흐름선 확장하십시오 joyon. 마드얀의)

-

특히 이 결과를 놓고 사용 및 속도, I&; d # 39 를 '를 해야 vs. 배열합니다 지지자가 상대방 주자가 후보가 됐을 때' 패키지 '를' 프라이어 . 이 회사는 아직 거의 같은 간단한 문법을 기반으로 빠른 스피드를 앞세워 및 R 명령의세 뒤얽힌 음모. 일반적으로 선명한 해들리 위컴 작동합니까. 이를 통해 정렬 객체에는 브레이크가 표준 R nomenclature, 복통, 이것만이 나의 것이 있는 이유에 대해 해들리 (객체) '에서' 라는 확보하십시오 정렬하려면 하지만 난 그것을했다 이쪽요 문제로 링크됨 위에 설명한 질문.

M--
Ben Bolker
그는 9년 전 댓글을 달았습니다
7

하지만, 나는 '내가 찾을 수 있다는 사실을 인정하는' +1 의 완전 마이크로벤크마크 출력입니다 매우 어려운 읽을 수 있습니다.

Ari B. Friedman
그는 8년 전 댓글을 달았습니다
3

이 기능을 사용할 수 있다 '는 현재 ggplot2 마이크로벤크마크 그들위에 taRifx::autoplot.microbenchmark'.

naught101
그는 8년 전 댓글을 달았습니다
0

39 의 비율을 intervals/what& @arib.friedman y-축 어떤 것이 있습니까?

Ari B. Friedman
그는 8년 전 댓글을 달았습니다
0

y 축을 @naught101 0 에서 시작합니다. 마이크로 배율입니다 합니다.

AME
그는 7년 전 댓글을 달았습니다
0

39, & # 39 를 사용하여, arrange& @arib.friedman 정렬하려면 올림차순 의해, 어떻게? 나는치료가그렇게 지켜보리니 참조용이므로 오름차순으로 정렬하는. # 39, & # 39 asc& 찾았다. # 39, & # 39 desc& 대신. 또한 doesn& # 39, 빗나갔다. 감사합니다

Ari B. Friedman
그는 7년 전 댓글을 달았습니다
2

@AME 살펴보면서 'b' 는 정렬 분류했다. 그래서 그냥 don& # 39 는 기본값입니다 올림차순, 이를 통해 정렬, t 감싸기 '설명'. 올림차순 모두: '배열합니다 (dd, z,b)'. 모두 내림차순을. '배열합니다 (dd, desc (z), desc (b)'.

landroni
그는 6년 전 댓글을 달았습니다
2

배열합니다 따라 '?': &quot, # 참고: 프라이어 기능ᆞ기술과 row.names&quot 유지하지 않음;. 따라서 이 경우 '최적화' 뛰어난 ' ()' 기능을 배열합니다 라우드나미스 유지하고 싶어한다.

Ari B. Friedman
그는 5년 전 댓글을 달았습니다
0

이들 중 일부는 '주문' 다소 빠르게 사용할 수 있습니다 '소t.리스트 사용하는 경우 (x, 방법 = "기수")' 를 사용할 수 있습니다.

39 의 dirk& 오토메이티드 아주 좋다. 또한 '와' 의 주요 차이는 강조표시합니다 사용되는 구문을 인덱스화를 다다드프라임 데이타스터블 의:

## The data.frame way
dd[with(dd, order(-z, b)), ]

## The data.table way: (7 fewer characters, but that's not the important bit)
dd[order(-z, b)]

주로 작은 차이는 있지만, 두 차례 통화 중요한 각오하랬지 있을 수 있습니다. 특히 운영 코드를 작성하는 경우, 해당 분야의 연구 및 / 또는 대해 걱정하고 있습니다 # 39 의 불필요한 반복을 피하기 위해 남편과 it& 베스트중에 변수 이름. '데이타스터블' 이렇게 할 수 있습니다.

39 의 사례를 here& 변수 이름 권능은하나님께 곤경에 빠지는 것에 있습니다.

39 에서 let& Dirk& # 39 라고 말하고, s, s 변경하십시오 컨텍스트로 더 큰 프로젝트 일환으로 많은 개체 이름 있는 경우, 이들이 길고 의미 있는. dd '대신', 's # 39 라는 it& 쿼터리어포트'. 됩니다.

quarterlyreport[with(quarterlyreport,order(-z,b)),]

알았어. 아무것도아니야 어때서. # 39 의 보고서가 지난 다음 상사를 quarter& 보고서에 포함시킬 것을 요구합니다. You go) '에서' 라스트쿼터리어포트 코드에 추가하여 객체에는 통해 여러 곳 및 짐작이지만요. (어떻게 대지위의?) 대체하십시오 끝날 수 있습니다.

quarterlyreport[with(lastquarterlyreport,order(-z,b)),]

39 건, t, t isn& 있는 너희는너희가 확장하지만 didn& 별색 # 39 에 자리 잡고 있기 때문에 당신은 그것을했다 빠르고 it& # 39 페이지에 비슷한 코드. # 39, 코드 doesn& 생각 때문에 R t fall 오버 (아무런 경고도 없이 오류) it is what you 한겁니다. 하지만 아마 그들은 보고서의 you& # 39, d, t 자 희망을 판독합니다 별색에 don& # 39. 그런 다음 이 상황에 대한 수 많은 프로그래밍 언어에서 사용할 경우 모든 익숙한. 이는 &quot typo"; # 39 라고 you&, ll. # 39, ll, typo&quot i& &quot 수정합니다. # 39, ll 말하도다 you& 데이터베이스에구성원을 보스.

'데이타스터블' 에서 # 39, 이런 작은 세부내용에서 we& re 않을까 우려하고 있다. 그래서 we& # 39, 입력 변수 이름을 피할 수 있는 단순한 사안이 ve done 주택복권에 당첨되셨다고요? 뭔가 아주 간단합니다. dd '의' i ',' 프레임 내의 검사됩니다 이미 자동으로. # 39 () '에 있는' t need 다란다 don& 있습니다.

대신

dd[with(dd, order(-z, b)), ]

39 의 그냥 it&

dd[order(-z, b)]

대신 및

quarterlyreport[with(lastquarterlyreport,order(-z,b)),]

39 의 그냥 it&

quarterlyreport[order(-z,b)]

39 의 아주 작은 차이, 그러나 it& 먹이좀 목 그냥 어느 날 수도 있다. 이 질문에 대한 답을 계산할 때 까지 무게가 다른 변수 이름 중 하나로 고려해보십시오 반복은 조건에 결정할. 이미 일부 답을 적지 반복, 또 다른 없음).

Josh O&#39;Brien
Josh O&#39;Brien
그는 8년 전 댓글을 달았습니다
9

이 과정은 매우 +1 점, 세부 사항을 얻을 수 있는 # 39 의 구문을 종종 따끔한 나여야지 R& http://support. 가끔 사용할 필요가 없도록 하기 위해 '그냥' 서브셋 () 는 하나의 동일한 개체를 반복적으로 호출하십시오) 는 다음과 같은 뜻이 있다.

naught101
그는 8년 전 댓글을 달았습니다
1
  • 왜 * 이 모든 것이 서로 다른 작업하십시오 없을까?
Matt Dowle
그는 8년 전 댓글을 달았습니다
2

faq 는 @naught101 데이타스터블 1.9 대답할?

David Arenburg
그는 6년 전 댓글을 달았습니다
5

아마 내가 너무 임무야, 이 같은 새로운 기능을 추가할 수 있다 '' 모든 '우리는 세트러더 스레드할 대화상자에서는 보내기 위해' 방식의 속는.

여기에 대답을 많다, 하지만 뛰어난 [드프리르] (http://github.com/hadley/dplyr) 를 통해 내가 할 수 있는 유일한 구문을 쉽고 빠르게 너희에게베풀어진 (및 이제 자주 사용).

library(dplyr)
# sort mtcars by mpg, ascending... use desc(mpg) for descending
arrange(mtcars, mpg)
# sort mtcars first by mpg, then by cyl, then by wt)
arrange(mtcars , mpg, cyl, wt)

39 의 OP& 대한 문제:

arrange(dd, desc(z),  b)

    b x y z
1 Low C 9 2
2 Med D 3 1
3  Hi A 8 1
4  Hi A 9 1

Saheel Godhane
그는 6년 전 댓글을 달았습니다
2

이 때는 작동하지 않습니다 수락됨 오토메이티드 내 열은 또는 문자 팩터에서의 (또는 뭐 그런) 의 패션 및 난 로렌아줌마가 정렬하려면 내림차순을 엔드입니다 팩터에서의 정수 열에 열 뒤에 올림차순 열었다. 그러나 이 작동됩니다. 감사합니다!

Matt Dowle
그는 6년 전 댓글을 달았습니다
10

왜 only&quot ";? 내가 찾을 data.table& # 39 의 'dd [순서 (z, b)]' 아주 쉽게 사용할 수 있으며 너희에게베풀어진.

Ben
그는 6년 전 댓글을 달았습니다
2

39 의 there& 했으며, 그 사이에 있는 두 가지 방법이 별로 없다 '는' R '및' 데이타스터블 다양한 방법으로 큰 기여를 했다. 예를 들어, 내가 될 수도 있지만, 적은 것은 1 세트를 가져다줄래요 브래킷에 (또는 원-부트 덜 유형의 브래킷에) 이 슬라이드에서는 의해 cognitive load) 는 겨우 지각할 수 있는 양입니다.

Mullefa
그는 5년 전 댓글을 달았습니다
6

It for me ',' 선언 () '가 있다는 사실을 완료되니라 다운되어도 배열합니다 완전히 dd [순서 (z, b)]' 그렇지 않다.

        • 및 패키지 'R' 은 모두 데이타스터블 빠른 메모리 효율형 데이타스타바레스 쉽게 주문할 수 있는 구문 (부품 재배케하여 맷 diskid 강조표시된 아주 아주 잘 [자신의 오토메이티드] (https://stackoverflow.com/a/10758086/559784)). 지금까지 많은 새로운 기능을 세트러더 () '' 도 꽤 개선 및 그 이후. Data.frames 수행됨 v1.9.5+ 세트러더 () '도', '에서' *

첫째, ll, 다른 방법 및 벤치마트 we& # 39 에서 언급한 후 다른 답변을 볼 만큼 데이터세트를 생성하시겠습니까 나열하십시오 기능을 data.table *

데이터:

require(plyr)
require(doBy)
require(data.table)
require(dplyr)
require(taRifx)

set.seed(45L)
dat = data.frame(b = as.factor(sample(c("Hi", "Med", "Low"), 1e8, TRUE)),
                 x = sample(c("A", "D", "C"), 1e8, TRUE),
                 y = sample(100, 1e8, TRUE),
                 z = sample(5, 1e8, TRUE), 
                 stringsAsFactors = FALSE)

벤치마크:

이러한 기능을 시스템스타임 (.) '에' 를 실행하여 타이밍 보고됨 있다 (아래 참조). 타이밍 방향벡터 아래 () 로 가장 빠른 순으로 최저속) 있다.

orderBy( ~ -z + b, data = dat)     ## doBy
plyr::arrange(dat, desc(z), b)     ## plyr
arrange(dat, desc(z), b)           ## dplyr
sort(dat, f = ~ -z + b)            ## taRifx
dat[with(dat, order(-z, b)), ]     ## base R

# convert to data.table, by reference
setDT(dat)

dat[order(-z, b)]                  ## data.table, base R like syntax
setorder(dat, -z, b)               ## data.table, using setorder()
                                   ## setorder() now also works with data.frames 

# R-session memory usage (BEFORE) = ~2GB (size of 'dat')
# ------------------------------------------------------------
# Package      function    Time (s)  Peak memory   Memory used
# ------------------------------------------------------------
# doBy          orderBy      409.7        6.7 GB        4.7 GB
# taRifx           sort      400.8        6.7 GB        4.7 GB
# plyr          arrange      318.8        5.6 GB        3.6 GB 
# base R          order      299.0        5.6 GB        3.6 GB
# dplyr         arrange       62.7        4.2 GB        2.2 GB
# ------------------------------------------------------------
# data.table      order        6.2        4.2 GB        2.2 GB
# data.table   setorder        4.5        2.4 GB        0.4 GB
# ------------------------------------------------------------

  • ',' & # 39 데이타스터블 dt/ s '는 ~ [주문 (.)]' 구문을 보다 10 배 빠른 반면 동일한 양의 메모리를 사용하는 다른 방법 ('드프리르') 로 '드프리르'.

  • ',' & # 39 데이타스터블 세트러더 s ' ()' 는 ~ 14x 보다 다른 가장 빠른 방법 ('드프리르') 그냥 0.4GB 참여하는 동안 추가 메모리를. 이제 우리가 할 수 있는 '' dat 주문하십시오 때처럼 업데이트되도록 참조별로).

데이타스터블 기능:

  • Speed:*

  • [주문 (.)] '' dt/ 구문을 사용하여 # 39 의 빠른 오더할 data.table* 최적화됩니다 내부적으로 잘 알려져 있다. 하지만 익숙한 기본 R 구문을 사용하여 프로세스 속도를 유지할 수 있습니다 (및 사용 적은 메모리).

  • Memory:*

, T, 우리는 대부분의 시간을 필요로 하는 don& 다다드프라임 데이타스터블 * # 39 는 원본 또는 후에 순서재정리. 즉, 우리 보통 할당하십시오 뒤로를 결과 동일한 객체 (예:

DF, DF - &lt [순서 (.)]

문제는 이 과정에서 최소한 두 번 (2x) 메모리가 원래 오브젝트도. , 데이타스터블 수 있어 효율적인 메모리 '는 또한 함수은 세트러더 ()'.

  • 데이타스타바레스 참조별로 재배열합니다 세트러더 () '' ',' ( 내부 *) 없이 추가 복제본에. 추가 메모리를 사용하여 동일한 크기의 1 열 뿐이다.

  • 다른 features:*

  1. 이 제품은 '정수', '논리', '숫자', '문자' 심지어 'bit64::integer64' 유형.

&gt. 참고로 ',' ',' 촉각 '팩터에서의 데이트였어 포식스. 숫자 '유형' 정수 '/' 클래스뿐만 모두 함께 사용할 수 있으며, 그 때문에 추가 속성을 잘 알려져 있다.

  1. R 을 사용할 수 없다 '-' 기본 문자에 대한 벡터입니다 주문하십시오 열에 의해 정렬하려면 있는 것. 우리는 '스테프라마 (.)' 대신 사용할 수 있습니다.

그러나 데이타스터블 , just do we can, 예를 들어, 'dat [순서 (x)]' 또는 '세트러더 (dat, - x)'.

Community
Julien Navarre
그는 5년 전 댓글을 달았습니다
0

바로 이 될지는 데이타스터블리 대한 답변을 주셔서 감사합니다. 하지만, 내가 이해하지 &quot 지정하십시오. don& # 39, 피크 memory"; 그리고 어떻게 계산한 것이다. 설명할 수 있을까요? 감사합니다!

Arun
그는 5년 전 댓글을 달았습니다
0

내가 예전에는 [인스트루먼트] (https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/Introduction/Introduction.html) - &gt. 모든 할당일까요 VM&quot, 힙 및 할당 및 &quot 보도했다. 크기.

MichaelChirico
그는 4년 전 댓글을 달았습니다
2

이 장비가 고리입니다 @arun 셀명 죽었어요. 한 해 게시물로의 업데이트할까요?

[1] 와 [이 (아주 도움됐네) 기능을 통해 케빈 라이트], wiki, R 이 실린 팁을 섹선에서 쉽게 달성했다.

sort(dd,by = ~ -z + b)
#     b x y z
# 4 Low C 9 2
# 2 Med D 3 1
# 1  Hi A 8 1
# 3  Hi A 9 1

[1]: //rwiki.sciviews.org/doku.php tips% 3adata-frames% 3asort? id = https://web.archive.org/web/20131108055534/http

MichaelChirico
Ari B. Friedman
그는 8년 전 댓글을 달았습니다
2

이 문제에 대한 보러 벤치마크테스트 (bmt) 에 사용되는 알고리즘입니다 이 기능을.

또는 도비 패키지할 사용할 수 있습니다.

library(doBy)
dd <- orderBy(~-z+b, data=dd)

'' A ',' 운영까지도 정렬하려면 다다드프라임 있다고 가정해 봅시다 '열' x '를 사용하여 해당 불렀으매 내림차순을 주문. Security. 정렬할지 다다드프라임 뉴다타 '' ''

newdata <- A[order(-A$x),]

스케쳐내 굈 ',' 올림차순 어졌다면 주문하십시오 " - &quot 조끼말고는 아무것도. 같은 뭔가를해야합니다 수 있습니다.

newdata <- A[order(-A$x, A$y, -A$z),]

여기서 'x' 와 'z' '' A '' 다다드프라임 단 몇 가지 있다. 즉, 'x', 'y' 정렬 '다다드프라임' 에서 'A' 와 'z' 내림차순을 올림차순 내림차순을.

order BY '패키지', '자크 두프 너회들 경우 SQL 방식' 으로 커드 고안되었습니다 처리합니다.

M--
Brandon Bertelsen
그는 10년 전 댓글을 달았습니다
7

이 패키지로의 마제마 지적하며, 함께 해 주셔서 감사합니다. # 39 의 it& 놀랍도록 유연한 데다 이미 절반은 내 업종에문제가 에서 sql 데이터베이스 it& # 39 에 비해 더 많이 잡아 당겨 수행됨 com/go/learn_fl_cs4_learningas2_kr R& # 39 의 미만임 직관적인 구문.

또는 숨겨요 데듀시르 사용하여

library(Deducer)
dd<- sortData(dd,c("z","b"),increasing= c(FALSE,TRUE))

이에 대해 체계적으로 정렬하려면 OP 셀명 추가되었다.

'드프리르 사용하여' 와 '데이타스터블'

library(dplyr)
library(data.table)

드프리르

이는 ',' 표준 '평가' 를 위한 버전이 배열합니다 arrange_ 됩니다.

df1 <- tbl_df(iris)
#using strings or formula
arrange_(df1, c('Petal.Length', 'Petal.Width'))
arrange_(df1, ~Petal.Length, ~Petal.Width)
    Source: local data frame [150 x 5]

   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
          (dbl)       (dbl)        (dbl)       (dbl)  (fctr)
1           4.6         3.6          1.0         0.2  setosa
2           4.3         3.0          1.1         0.1  setosa
3           5.8         4.0          1.2         0.2  setosa
4           5.0         3.2          1.2         0.2  setosa
5           4.7         3.2          1.3         0.2  setosa
6           5.4         3.9          1.3         0.4  setosa
7           5.5         3.5          1.3         0.2  setosa
8           4.4         3.0          1.3         0.2  setosa
9           5.0         3.5          1.3         0.3  setosa
10          4.5         2.3          1.3         0.3  setosa
..          ...         ...          ...         ...     ...

#Or using a variable
sortBy <- c('Petal.Length', 'Petal.Width')
arrange_(df1, .dots = sortBy)
    Source: local data frame [150 x 5]

   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
          (dbl)       (dbl)        (dbl)       (dbl)  (fctr)
1           4.6         3.6          1.0         0.2  setosa
2           4.3         3.0          1.1         0.1  setosa
3           5.8         4.0          1.2         0.2  setosa
4           5.0         3.2          1.2         0.2  setosa
5           4.7         3.2          1.3         0.2  setosa
6           5.5         3.5          1.3         0.2  setosa
7           4.4         3.0          1.3         0.2  setosa
8           4.4         3.2          1.3         0.2  setosa
9           5.0         3.5          1.3         0.3  setosa
10          4.5         2.3          1.3         0.3  setosa
..          ...         ...          ...         ...     ...

#Doing the same operation except sorting Petal.Length in descending order
sortByDesc <- c('desc(Petal.Length)', 'Petal.Width')
arrange_(df1, .dots = sortByDesc)

여기에 자세한 정보: https://cran.r-project.org/web/packages/dplyr/vignettes/nse.html

또한 공식을 그대로 사용하는 것이 좋습니다 평가할 수 있는 환경을 표현식에서는 캡처

데이타스터블

dt1 <- data.table(iris) #not really required, as you can work directly on your data.frame
sortBy <- c('Petal.Length', 'Petal.Width')
sortType <- c(-1, 1)
setorderv(dt1, sortBy, sortType)
dt1
     Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
  1:          7.7         2.6          6.9         2.3 virginica
  2:          7.7         2.8          6.7         2.0 virginica
  3:          7.7         3.8          6.7         2.2 virginica
  4:          7.6         3.0          6.6         2.1 virginica
  5:          7.9         3.8          6.4         2.0 virginica
 ---                                                            
146:          5.4         3.9          1.3         0.4    setosa
147:          5.8         4.0          1.2         0.2    setosa
148:          5.0         3.2          1.2         0.2    setosa
149:          4.3         3.0          1.1         0.1    setosa
150:          4.6         3.6          1.0         0.2    setosa

그러면 내가 배웠던 '주문' 을 (를) 다음 예제에서는 너무 오랫동안 나를.

set.seed(1234)

ID        = 1:10
Age       = round(rnorm(10, 50, 1))
diag      = c("Depression", "Bipolar")
Diagnosis = sample(diag, 10, replace=TRUE)

data = data.frame(ID, Age, Diagnosis)

databyAge = data[order(Age),]
databyAge

이 때문에 단 하나의 이유는 '예' 는 벡터) 시대 '가 아닌' 는 정렬 순서 '시대' 에 의해 열이 '데이터 프레임을 데이터'.

동일한 데이터를 사용하여 만들 수 있는 '프레임' 이 슬라이드에서는 레더스터블 위의 벡터 약간 다른 열 이름을 사용하지 않고 있다.

my.data <- read.table(text = '

  id age  diagnosis
   1  49 Depression
   2  50 Depression
   3  51 Depression
   4  48 Depression
   5  50 Depression
   6  51    Bipolar
   7  49    Bipolar
   8  49    Bipolar
   9  49    Bipolar
  10  49 Depression

', header = TRUE)

위의 선 구조를 '주문' 더 이상 작동하지 않는 벡터입니다 없기 때문에 이름이 '시대'.

databyage = my.data[order(age),]

'다음' 에서 '열' 선 '에 있기 때문에 작동됨 주문하십시오 신규인지 기간보다오래된 미스다타'.

databyage = my.data[order(my.data$age),]

이 때 나는 이 글을 어떻게 생각해봤죠 가치는 너무 오랫동안 예제에서와 두고 있었다. 내가 할 수 없는 경우 이 게시물에 대한 분리하십시오 스레드할 결정하게 된다.

  • 편집: 13일 5월 2014년 *

다음은 길을 열 이름을 지정하지 않고 모든 열에 의해 일반 데이터 프레임을 정렬. 아래 코드는 왼쪽에서 오른쪽으로 사용하거나 오른쪽에서 왼쪽으로 정렬하려면 방법을 보여줍니다. 이 경우 모든 열이 작동됨 숫자. 난 아직 문자로 열 했다 "고 덧붙였다.

한두 달 전부터 코드 a 에서 i found 도스콜 '이' 늙은 포스트에 뿐 다른 사이트를 검색 후 광범위하고 어렵다. 나는 이제 어떻게 할 수 있는 재배치합니다 게시물로의 확실하지 않다. 현재 '에서' R 'a' 는 오더할 다다드프라임 스레드할 처음 나왔다. 당초 '코드' 내 확장됨 버전에 따라서 생각해봤죠 도스콜 유용할 수 있습니다.

set.seed(1234)

v1  <- c(0,0,0,0, 0,0,0,0, 1,1,1,1, 1,1,1,1)
v2  <- c(0,0,0,0, 1,1,1,1, 0,0,0,0, 1,1,1,1)
v3  <- c(0,0,1,1, 0,0,1,1, 0,0,1,1, 0,0,1,1)
v4  <- c(0,1,0,1, 0,1,0,1, 0,1,0,1, 0,1,0,1)

df.1 <- data.frame(v1, v2, v3, v4) 
df.1

rdf.1 <- df.1[sample(nrow(df.1), nrow(df.1), replace = FALSE),]
rdf.1

order.rdf.1 <- rdf.1[do.call(order, as.list(rdf.1)),]
order.rdf.1

order.rdf.2 <- rdf.1[do.call(order, rev(as.list(rdf.1))),]
order.rdf.2

rdf.3 <- data.frame(rdf.1$v2, rdf.1$v4, rdf.1$v3, rdf.1$v1) 
rdf.3

order.rdf.3 <- rdf.1[do.call(order, as.list(rdf.3)),]
order.rdf.3

Mark Miller
Frank
그는 7년 전 댓글을 달았습니다
4

그 대신 다다드프라임 데이타스터블 데이터를 저장할 때 구문 작동합니다. '필요한 (데이타스터블); 미스트 데이타스터블 < - (미스다타); 이 때문에 '미스트 [순서 (나이)] [] 안의 브래킷에 작동됨 열 이름을 사용할 수 있습니다.

A5C1D2H2I1M1N2O1R2T1
그는 6년 전 댓글을 달았습니다
0

하지만, 내가 여기 다운보테 don& # 39 이 필요하다고 생각하는 것 같지는 않다 이렇게 하면 항상 대한 질문 저도 많이 있으며, 일부는 이미, 특히 기존 모범답안을 요구 사항을 고려해 '사람' 을 (를) '또는' 을 사용하여 포착하십시오 다다드프라임 $ '.

AdamO
그는 4년 전 댓글을 달았습니다
1

"에 대한 업보테 도스콜 '이렇게 하면 파선-짧은 작품을 여러 열 데이터 프레임을 정렬. 단순히 '아름다운 케스케이드 정렬 (sort, 미드프리오비)' 와 도스콜 될 것이다.

39 에 답이 dirk& 좋으나 하는 경우, ll want to # 39 를 옛일에 정렬하려면 you& 정렬하려면 적용하십시오 이름을 되돌릴 수 있는 데이터 프레임을. 사용 예제 코드:

dd <- dd[with(dd, order(-z, b)), ] 

내가 좋아하는 옵션을 드프라이어 이 배열합니다 () 에 있다. 작은 것부터 사용하여 파이프 작동자 and go 에서 가장 중요한 화면

dd1 <- dd %>%
    arrange(z) %>%
    arrange(desc(x))

생각해서라도 완전성: '에서' () '기능을 사용할 수도 있습니다 조르트비콜 브미스' 패키지:

library(BBmisc)
sortByCol(dd, c("z", "b"), asc = c(FALSE, TRUE))
    b x y z
4 Low C 9 2
2 Med D 3 1
1  Hi A 8 1
3  Hi A 9 1

성능 비교:

library(microbenchmark)
microbenchmark(sortByCol(dd, c("z", "b"), asc = c(FALSE, TRUE)), times = 100000)
median 202.878

library(plyr)
microbenchmark(arrange(dd,desc(z),b),times=100000)
median 148.758

microbenchmark(dd[with(dd, order(-z, b)), ], times = 100000)
median 115.872

MichaelChirico
그는 4년 전 댓글을 달았습니다
4

이상한 성능 비교 방법을 추가할 때 가장 느린. 어쨌든 '가치' 를 사용하는 일부 벤치마크입니다 4 행 다다드프라임

얼마 전 의해 처음으로 최하위 정렬하려면 분류기 마찬가지로 기계 카드 중 가장 큰 키, 다음, etc. 아니 라이브러리란 필요한 키와 키 조합을 원하는 만큼 수행됨 月有陰晴圓缺).

 dd <- dd[order(dd$b, decreasing = FALSE),]

39, re 할 준비가 돼 we& 이제 가장 중요한 핵심입니다. Sort 는 안정적인 이미 확인된 가장 큰 키, 모든 관계.

dd <- dd[order(dd$z, decreasing = TRUE),]

가장 간단하고 신뢰할 수 있지만, 아닐 수도 있다는 것은

그냥 생각해서라도 완성도, 이후 지금까지 약 정렬 열별 숫자임 크지 않다 "고 말했다. 것이라 할 수 있다는 것은 바람직하지 않다 "고 자주 (열의 순서를 바꿀 수 있는 길이 열렸다 때문에, 오류에 대한) 이지만, 일부 특정 상황에 경우 예를 들어 필요한 업무 처리 등 열을 빠르게 변화하는 명령이라구요 위험이 없다), 특히 다룰 때 가장 먼저 할 일이 될 수도 있지만, 그 많은 수의 열.

이 경우, () '는' 도스콜 구조:

ind <- do.call(what = "order", args = iris[,c(5,1,2,3)])
iris[ind, ]

##        Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
##    14           4.3         3.0          1.1         0.1     setosa
##    9            4.4         2.9          1.4         0.2     setosa
##    39           4.4         3.0          1.3         0.2     setosa
##    43           4.4         3.2          1.3         0.2     setosa
##    42           4.5         2.3          1.3         0.3     setosa
##    4            4.6         3.1          1.5         0.2     setosa
##    48           4.6         3.2          1.4         0.2     setosa
##    7            4.6         3.4          1.4         0.3     setosa
##    (...)

또 다른 대체 '패키지' 를 사용하여 리르.

> library(rgr)
> gx.sort.df(dd, ~ -z+b)
    b x y z
4 Low C 9 2
2 Med D 3 1
1  Hi A 8 1
3  Hi A 9 1

내가 어렸을 때 내가 하고 싶은 내 오더할 과정을 겪고, 그 위의 솔루션뀉뀉뀉뀉 자동화합니다 ᄂ씨 열 때마다 열 이름이 다를 수 있다. 내가 찾은 이 작업을 수행할 수 있는 '패키지' 수퍼 도움됐네 함수은 정신과 간단한 방법으로:

dfOrder(myDf, columnIndices)

여기서 '지수' 는 하나 이상의 열을 콜럼닌딕스 순서대로 운영까지도 정렬하려면 저들이요 자세한 내용은 여기.

# 39, & # 39 에서 드퍼드르 함수은 psych&. 패키지