如何按列正确排序数据框

时间:2014-12-09 21:27:43

标签: r

我有一个包含40列的数据框,我想在“延迟”列上从小到大排序。什么是最好的方式?

作为一个例子,我在下面有一个数据框,有4行和一个“延迟”列:

  col1<-c(1,2,4,5)
  col2<-c(5,6,7,4)
  posX1<-as.POSIXct(c("2014-11-10 19:47:09","2014-11-10 19:59:49","2014-11-10 20:19:18","2014-11-10 20:59:25"))
  posX2<-as.POSIXct("2014-11-10 20:59:25")
  dif<-abs(posX1 - posX2)
  data.frame(col1 = col1, col2=col2,time=posX1,delay=dif)

 col1 col2                time     delay
1    1    5 2014-11-10 19:47:09 4336 secs
2    2    6 2014-11-10 19:59:49 3576 secs
3    4    7 2014-11-10 20:19:18 2407 secs
4    5    4 2014-11-10 20:59:25    0 secs

如何从延迟列的最小到最大排序?

谢谢!

1 个答案:

答案 0 :(得分:1)

首先,我建议使用data.table而不是data.frame,因为它的速度。 如果你使用data.table那么它很简单:

> A = data.table(col1 = col1, col2=col2,time=posX1,delay=dif)
> setkey(A,"delay")
> A
   col1 col2                time     delay
1:    5    4 2014-11-10 20:59:25    0 secs
2:    4    7 2014-11-10 20:19:18 2407 secs
3:    2    6 2014-11-10 19:59:49 3576 secs
4:    1    5 2014-11-10 19:47:09 4336 secs

如果您坚持使用data.frame,请使用:

> A = data.frame(col1 = col1, col2=col2,time=posX1,delay=dif)
> A[order(A$delay),]
  col1 col2                time     delay
4    5    4 2014-11-10 20:59:25    0 secs
3    4    7 2014-11-10 20:19:18 2407 secs
2    2    6 2014-11-10 19:59:49 3576 secs
1    1    5 2014-11-10 19:47:09 4336 secs