gpt4 book ai didi

r - 按 r 中的精确数字序列对数据集进行排序

转载 作者:行者123 更新时间:2023-12-04 11:30:18 25 4
gpt4 key购买 nike

我有,我认为是一个非常简单的问题,但无法弄清楚或无法在网上找到确切的问题。我想按 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

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

    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

我更喜欢在 dplyr 中使用 arrange 函数,但会采取任何解决方案。我相信我应该创建一个向量 v<-c(1,2,3,4) 并使用 %in% 对此进行排序,但我不确定如何进行。像这样的东西我认为只是订购 1,1,1 这不是我想要的。感谢任何帮助,谢谢。

最佳答案

我们可以创建一个按“id”、“time”分组的序列列,然后根据“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

如果我们使用 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

关于r - 按 r 中的精确数字序列对数据集进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38435722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com