按r中的精确数字顺序排序数据集

use*_*230 2 sorting r sequence dplyr

我有,我认为这是一个非常简单的问题,但无法弄明白或在网上找到确切的问题.我想按id和时间1:4对我的数据集进行排序,以便它在序列1,2,3,4而不是1,1,1,2,2,2,3,4中.见例子:

dff <- data.frame (id=c(1,1,1,1,1,1,1,1,2,2,2,3),
                      time=c(1,1,2,2,3,3,4,4,1,1,2,1))
    R>dff
       id time
    1   1    1
    2   1    1
    3   1    2
    4   1    2
    5   1    3
    6   1    3
    7   1    4
    8   1    4
    9   2    1
    10  2    1
    11  2    2
    12  3    1
Run Code Online (Sandbox Code Playgroud)

我希望生成的数据集按如下顺序排序:

    R>dff
   id time
1   1    1
2   1    2
3   1    3
4   1    4
5   1    1
6   1    2
7   1    3
8   1    4
9   2    1
10  2    2
11  2    1
12  3    1
Run Code Online (Sandbox Code Playgroud)

我最好喜欢使用arrange函数,dplyr但会采取任何解决方案.我相信我应该创建一个向量v <-c(1,2,3,4)并使用%in%进行排序,但我不确定如何.这样的事情我认为只是订单1,1,1这不是我想要的.任何帮助表示感谢,谢谢.

akr*_*run 5

我们可以创建一个按'id','time'分组的序列列,然后arrange根据'ind'进行,然后删除列select

library(dplyr)
dff %>%
    group_by(id, time) %>% 
    mutate(ind = row_number()) %>%
    arrange(id, ind) %>%
    select(-ind)
#     id  time
#   <dbl> <dbl>
#1      1     1
#2      1     2
#3      1     3
#4      1     4
#5      1     1
#6      1     2
#7      1     3
#8      1     4
#9      2     1
#10     2     2
#11     2     1
#12     3     1
Run Code Online (Sandbox Code Playgroud)

如果我们使用base R,以下单行将用于此目的

dff[order(dff$id, with(dff, ave(time, id, time, FUN = seq_along))),]
#   id time
#1   1    1
#3   1    2
#5   1    3
#7   1    4
#2   1    1
#4   1    2
#6   1    3
#8   1    4
#9   2    1
#11  2    2
#10  2    1
#12  3    1
Run Code Online (Sandbox Code Playgroud)