首页 > 解决方案 > 重新排序数据框的行

问题描述

我想将我的 dftime列重新排序为04:00从而不是从00:00. 订单将是04:00, 05:00,..., 00:00, 01:00, 02:00, 03:00be 我该怎么做?

<-structure(list(time=c ("00:00", "01:00","02:00","03:00", "04:00", "05:00", "06:00", "07:00",
                        "08:00", "09:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00", "17:00", "18:00",
                         "19:00", "20:00", "21:00", "22:00", "23:00"), 
               Season = c(1, 2, 3, 5, 6, 7,8,9,10,12,1,1, 2, 3, 5, 6, 7,8,9,10,12,9,10,12), 
               Total= c(1, 2, 3, 5, 6, 7,8,9,10,12,1,1, 2, 3, 5, 6, 7,8,9,10,12,9,10,12 ) 
              ), row.names = c(NA,24L), class = "data.frame")

标签: rdataframe

解决方案


您可以使用match来查找 的索引'04:00'

inds <- match('04:00', df$time)
df[c(inds:nrow(df), 1:(inds - 1)), ]

#    time Season Total
#5  04:00      6     6
#6  05:00      7     7
#7  06:00      8     8
#8  07:00      9     9
#9  08:00     10    10
#10 09:00     12    12
#11 10:00      1     1
#...
#...
#1  00:00      1     1
#2  01:00      2     2
#3  02:00      3     3
#4  03:00      5     5

这是另一个变体dplyr

library(dplyr)
df %>% arrange(row_number() < match('04:00', time))

推荐阅读