我正在尝试通过使用来订购数据框dplyr::arrange
。问题是我尝试排序的列包含一个固定字符串后跟一个数字,例如由下面的虚拟代码生成的。
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 和 ABC100mixedsort(as.character(dummydf$sortcol))
会做那个把戏。
现在,我知道我可以通过使用来做到这一点sub
in my arrange
争论:dummydf %>% arrange(as.numeric(sub("ABC","",sortcol)))
但这主要是因为我的字符串是固定的(尽管任何正则表达式都可以用于捕获我认为的任何字符串后面的最后一个数字)。
我只是想知道:是否有一种更“优雅”和通用的方法来完成此任务dplyr::arrange
,以同样的方式gtools::mixedsort
?
亲切的问候,
FM