gpt4 book ai didi

r - 使用 gtools::mixedsort 或 dplyr::arrange 的替代品

转载 作者:行者123 更新时间:2023-12-04 07:36:51 25 4
gpt4 key购买 nike

我正在尝试通过使用 dplyr::arrange 来订购数据帧.问题是我试图排序的列包含一个固定字符串后跟一个数字,例如由下面的 dummycode 生成。

  dummydf<-data.frame(values=rnorm(100),sortcol=paste0("ABC",sample(1:100,100,replace=FALSE)))

默认情况下,使用 dummydf %>% arrange(sortcol)将生成按字母数字 (?) 排序的 df 但这当然不是所需的结果:
values sortcol
0.708081720 ABC1
0.041348322 ABC10
1.730962886 ABC100
0.423480861 ABC11
-1.545837266 ABC12
-1.345539947 ABC13
-0.078998792 ABC14
0.088712174 ABC15
0.670583024 ABC16
1.238837680 ABC17
-1.459044293 ABC18
-2.028535223 ABC19
0.779514385 ABC2
1.360509910 ABC20

在这个例子中,我想将列排序为 gtools::mixedsort会这样做,确保 ABC2 跟在 ABC1 之后,并且前面没有 ABC1-19 和 ABC100 mixedsort(as.character(dummydf$sortcol))会做那个把戏。

现在,我知道我可以通过使用 sub 来做到这一点。在我的 arrange参数: dummydf %>% arrange(as.numeric(sub("ABC","",sortcol)))但这主要是因为我的字符串是固定的(尽管我想可以使用任何正则表达式来捕获任何字符串后面的最后一位数字)。

我只是想知道:是否有更“优雅”和通用的方式来完成此操作 dplyr::arrange ,以与 gtools::mixedsort 相同的方式?

亲切的问候,

调频

最佳答案

这是一个使用 mysterious 的功能性解决方案身份order(order(x)) == rank(x) .

mixedrank = function(x) order(gtools::mixedorder(x))
dummydf %>% dplyr::arrange(mixedrank(sortcol))

关于r - 使用 gtools::mixedsort 或 dplyr::arrange 的替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32378108/

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