2016-10-11 3 views
6

저는 이것을 끊임없이 찾아 보았습니다. 아무 래도 아무 것도이 문제를 해결하지 못했습니다. 문제.R에서 데이터 프레임의 순서를 반대로하는 방법

나는 4 개의 열이있는 가격이라는 데이터 프레임을 가지고 있는데 그 중 하나는 과거 날짜 목록이고 다른 3 가지는 제품 가격 목록입니다.

1 10/10/2016 53.14 50.366 51.87 
2 07/10/2016 51.93 49.207 50.38 
3 06/10/2016 52.51 49.655 50.98 
4 05/10/2016 51.86 49.076 50.38 
5 04/10/2016 50.87 48.186 49.3 
6 03/10/2016 50.89 48.075 49.4 
7 30/09/2016 50.19 47.384 48.82 
8 29/09/2016 49.81 46.924 48.4 
9 28/09/2016 49.24 46.062 47.65 
10 27/09/2016 46.52 43.599 45.24 

목록은 252 가격입니다. 출력 결과를 목록 하단에 최신 날짜와 해당 가격을 최신 가격으로 목록 하단에 저장하려면 어떻게합니까? 당신은 단지 dataframe의 행의 순서를 반대로하려면

+5

'df'가 당신의'data.frame'이라면, 날짜 열은'date'라고 불리우며 데이터 세트를 날짜별로 정렬하기를 원할 것입니다. 단지'df [order (df $ date),]'를 시도해보십시오. – nicola

+0

또한'date' 열이'as.Date'로 설정되어 있는지 확인하십시오 – Sotos

+2

OP의 날짜가 불행히도 @Sotos 인'Date' 객체가 아닙니다. 그렇다면 ISO 형식 문자열이됩니다. 나는 디스플레이 순서가 중요한 이유에 대해 궁금해한다. (주문에 의존하는 처리를 원할 수 있기 때문이다.) 하지만, OP는 이미 역순으로 존재하고'df [252 : 1,]'행의 수를 알고 있기 때문에 작동 할 것입니다. – hrbrmstr

답변

7

, 당신은 다음과 같은 작업을 수행 할 수

df<- df[seq(dim(df)[1],1),] 
+0

좋은 해결책. 하지만 여기서'seq'는 필요 없습니다. 그것은 단지 당신의 코드를 늦출 것이다. – 5th

4

그냥 완성도를 위해서. 실제로 seq으로 전화 할 필요는 없습니다. 여기 내 재판에서

### Create some sample data 
n=252 
sampledata<-data.frame(a=sample(letters,n,replace=TRUE),b=rnorm(n,1,0.7), 
         c=rnorm(n,1,0.6),d=runif(n)) 

### Compare some different ways to reorder the dataframe 
myfun1<-function(df=sampledata){df<-df[seq(nrow(df),1),]} 
myfun2<-function(df=sampledata){df<-df[seq(dim(df)[1],1),]} 
myfun3<-function(df=sampledata){df<-df[dim(df)[1]:1,]} 
myfun4<-function(df=sampledata){df<-df[nrow(df):1,]} 

### Microbenchmark the functions 


microbenchmark::microbenchmark(myfun1(),myfun2(),myfun3(),myfun4(),times=1000L) 
    Unit: microseconds 
     expr min  lq  mean median  uq  max neval 
    myfun1() 63.994 67.686 117.61797 71.3780 87.3765 5818.494 1000 
    myfun2() 63.173 67.686 99.29120 70.9680 87.7865 2299.258 1000 
    myfun3() 56.610 60.302 92.18913 62.7635 76.9155 3241.522 1000 
    myfun4() 56.610 60.302 99.52666 63.1740 77.5310 4440.582 1000 

빠른 방법df<-df[dim(df)[1]:1,]을 사용하는 것이었다 : 당신은 단지 : -R-논리를 사용할 수 있습니다. 그러나 dim 대신 nrow을 사용하면 약간 느립니다. 이것을 개인 취향의 문제로 만듭니다.

seq을 사용하면 여기에 프로세스가 확실히 느려집니다.

관련 문제