【问题标题】:Reorder the rows of a dataframe重新排序数据框的行
【发布时间】:2023-03-10 21:06:01
【问题描述】:

我想将我的 df time 列重新排序为从 04:00 开始,而不是从 00:00 开始。订单将是04:0005:00、...、00:0001:0002:0003:00 我该怎么做?

<-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")

【问题讨论】:

  • 简单就是最好的。 rbind(df[5:24,],df[1:4,])

标签: r dataframe


【解决方案1】:

您可以使用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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    相关资源
    最近更新 更多