gpt4 book ai didi

r - 按不同的降序排列数字

转载 作者:行者123 更新时间:2023-12-05 00:09:54 26 4
gpt4 key购买 nike

相当简单的问题我似乎无法想出一个优雅的解决方案。

我想通过不同的降序排列一列数据:

library(dplyr)
test <- data.frame(ID=c(19000,19001,19002,1,2))

test %>%
arrange(desc(ID)) %>%
mutate(ID = formatC(ID,width=5,format="d",flag="0"))

ID
1 19002
2 19001
3 19000
4 00002
5 00001

我想要:
     ID
1 00002
2 00001
3 19002
4 19001
5 19000

这是用于管道,因此将添加更多 ID,例如00003, 00004....

这是我想出的东西:
test %>% 
mutate(ID = formatC(ID,width=5,format="d",flag="0")) %>%
group_by(group=substr(ID,1,1)) %>%
arrange(desc(ID)) %>%
arrange(group) %>%
ungroup() %>%
select(ID)

还有比这更好的吗?

编辑 -
library(microbenchmark)

test <- data.frame(ID=c(1:29999))

microbenchmark(group = test %>%
mutate(ID = formatC(ID,width=5,format="d",flag="0"),
group = substr(ID,1,1)) %>%
arrange(group, desc(ID)) %>%
select(ID),

mod = test %>%
arrange(ID %/% 1000, desc(ID %% 1000)) %>%
mutate(ID = formatC(ID,width=5,format="d",flag="0")))

Unit: milliseconds
expr min lq mean median uq max neval cld
group 138.0480 152.21025 168.7705 160.41305 176.6362 352.4736 100 b
mod 27.7697 29.94265 34.1312 31.92085 35.5323 88.8065 100 a

谢谢大家!看起来我有我的答案。

最佳答案

您可以只按千位数排序,然后按模 1000 降序排序。这样您就不需要添加组列。

library(dplyr)
test <- data.frame(ID=c(19000,19001,19002,1,2))

test %>%
arrange(ID %/% 1000, desc(ID %% 1000)) %>%
mutate(ID = formatC(ID,width=5,format="d",flag="0"))

#> ID
#> 1 00002
#> 2 00001
#> 3 19002
#> 4 19001
#> 5 19000

关于r - 按不同的降序排列数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59565988/

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