如何根据时间顺序重新排列数据帧中的行

时间:2018-09-28 09:41:21

标签: r

我的数据帧如下

sample <- data.frame(Time = c("10:39:00.064 IST", "10:39:00.165 IST", "10:39:00.265 IST", "10:39:00.366 IST",
            "10:39:00.466 IST", "10:39:00.566 IST", "10:39:00.967 IST", "10:39:01.067 IST", "10:39:01.168 IST",
            "10:39:01.269 IST", "10:39:01.369 IST", "10:39:00.665 IST", "10:39:00.765 IST", "10:39:00.866 IST",
            "10:39:01.771 IST", "10:39:01.468 IST", "10:39:01.570 IST", "10:39:01.671 IST"), 
             a = c("A", "D", "A", "C", "D", "W", "T", "R", "Q", "S", "A", "W", "I", "P", "K", "J", "D", "F"), 
             b = c(8, 3, 9, 9,5,8,9,7,5,6,8,6,5,4,7,5,8,7),
             c = c(1, 1, 1, 2, 25,1,4,8,68,59,35,42,45,2,5,7,66,5))

样本

 Time                a      b      c
10:39:00.064 IST     A      8      1 
10:39:00.165 IST     D      3      1
10:39:00.265 IST     A      9      1
10:39:00.366 IST     C      9      2
10:39:00.466 IST     D      5     25
10:39:00.566 IST     W      8      1
10:39:00.967 IST     T      9      4
10:39:01.067 IST     R      7      8
10:39:01.168 IST     Q      5     68
10:39:01.269 IST     S      6     59
10:39:01.369 IST     A      8     35
10:39:00.665 IST     W      6     42
10:39:00.765 IST     I      5     45
10:39:00.866 IST     P      4      2
10:39:01.771 IST     K      7      5
10:39:01.468 IST     J      5      7
10:39:01.570 IST     D      8     66
10:39:01.671 IST     F      7      5

在数据帧样本中,第一列的时间顺序不正确

所以,我使用以下代码重新排列行以使其按特定的顺序排列

 sample[with(sample, order(-Time)), ]

但是,样本没有排序,预期输出如下

Time                a      b      c
10:39:00.064 IST     A      8      1 
10:39:00.165 IST     D      3      1
10:39:00.265 IST     A      9      1
10:39:00.366 IST     C      9      2
10:39:00.466 IST     D      5     25
10:39:00.566 IST     W      8      1
10:39:00.665 IST     W      6     42
10:39:00.765 IST     I      5     45
10:39:00.866 IST     P      4      2
10:39:00.967 IST     T      9      4
10:39:01.067 IST     R      7      8
10:39:01.168 IST     Q      5     68
10:39:01.269 IST     S      6     59
10:39:01.369 IST     A      8     35
10:39:01.468 IST     J      5      7
10:39:01.570 IST     D      8     66
10:39:01.671 IST     F      7      5
10:39:01.771 IST     K      7      5

预先感谢

2 个答案:

答案 0 :(得分:0)

使用lubridate即可做到。

sample <- data.frame(Time = c("10:39:00.064 IST", "10:39:00.165 IST", "10:39:00.265 IST", "10:39:00.366 IST",
            "10:39:00.466 IST", "10:39:00.566 IST", "10:39:00.967 IST", "10:39:01.067 IST", "10:39:01.168 IST",
            "10:39:01.269 IST", "10:39:01.369 IST", "10:39:00.665 IST", "10:39:00.765 IST", "10:39:00.866 IST",
            "10:39:01.771 IST", "10:39:01.468 IST", "10:39:01.570 IST", "10:39:01.671 IST"), 
             a = c("A", "D", "A", "C", "D", "W", "T", "R", "Q", "S", "A", "W", "I", "P", "K", "J", "D", "F"), 
             b = c(8, 3, 9, 9,5,8,9,7,5,6,8,6,5,4,7,5,8,7),
             c = c(1, 1, 1, 2, 25,1,4,8,68,59,35,42,45,2,5,7,66,5))

library(lubridate)
sample1<- sample
sample1$Time <- hms(sample1$Time)

sample1 <- sample1[order(sample1$Time),]

答案 1 :(得分:0)

使用sqldf库:

sqldf("select * from sample order by Time")

输出:

       Time         a b  c
1  10:39:00.064 IST A 8  1
2  10:39:00.165 IST D 3  1
3  10:39:00.265 IST A 9  1
4  10:39:00.366 IST C 9  2
5  10:39:00.466 IST D 5 25
6  10:39:00.566 IST W 8  1
7  10:39:00.665 IST W 6 42
8  10:39:00.765 IST I 5 45
9  10:39:00.866 IST P 4  2
10 10:39:00.967 IST T 9  4
11 10:39:01.067 IST R 7  8
12 10:39:01.168 IST Q 5 68
13 10:39:01.269 IST S 6 59
14 10:39:01.369 IST A 8 35
15 10:39:01.468 IST J 5  7
16 10:39:01.570 IST D 8 66
17 10:39:01.671 IST F 7  5
18 10:39:01.771 IST K 7  5