R “安排订单”;运行“U 1”;然后是“;运行“U 2”;而不是",;运行“U 11”;

R “安排订单”;运行“U 1”;然后是“;运行“U 2”;而不是",;运行“U 11”;,r,R,我有一个类似下面的tibble test <- tibble(run = c("run_1","run_2", "run_3", "run_11", "run_111", "run_4")) test %>% arrange(run) 但是我想要 1 run_1 2 run_2 3 run_3 4 run_4 5 run_11 6 run_111 有什么解决方法吗?您可以在gtools包中使用mixedsort: gtools::mixedsort 您可以在gto

我有一个类似下面的tibble

test <- tibble(run = c("run_1","run_2", "run_3", "run_11", "run_111", "run_4"))

test %>% arrange(run)
但是我想要

1  run_1
2  run_2
3  run_3
4  run_4
5  run_11
6  run_111

有什么解决方法吗?

您可以在gtools包中使用mixedsort:

gtools::mixedsort

您可以在gtools包中使用mixedsort:

gtools::mixedsort

提取字符串中要排序的部分,然后按该部分排序

库(TIBLE)
测试%
mutate(num=as.integer(gsub(“^0-9]*(\\d*”,“\\1”,run)))%>%
排列(个)
#>#tibble:6 x 2
#>运行数
#>      
#>1运行1 1
#>2运行2 2
#>3运行3 3
#>4运行4 4
#>5运行11 11
#>6运行_111 111

提取字符串中希望按其排序的部分,然后按其排序

库(TIBLE)
测试%
mutate(num=as.integer(gsub(“^0-9]*(\\d*”,“\\1”,run)))%>%
排列(个)
#>#tibble:6 x 2
#>运行数
#>      
#>1运行1 1
#>2运行2 2
#>3运行3 3
#>4运行4 4
#>5运行11 11
#>6运行_111 111
编辑

使用
mixedorder
函数:

library(gtools)
test <- tibble(run = c("run_1","run_2", "run_3", "run_11", "run_111", "run_4"))
test[mixedorder(test$run),]
# A tibble: 6 × 1
      run
    <chr>
1   run_1
2   run_2
3   run_3
4   run_4
5  run_11
6 run_111
library(gtools)
test <- c("run_1","run_2", "run_11", "run_3")
mixedsort(test)
[1] "run_1"  "run_2"  "run_3"  "run_11"
编辑

使用
mixedorder
函数:

library(gtools)
test <- tibble(run = c("run_1","run_2", "run_3", "run_11", "run_111", "run_4"))
test[mixedorder(test$run),]
# A tibble: 6 × 1
      run
    <chr>
1   run_1
2   run_2
3   run_3
4   run_4
5  run_11
6 run_111
library(gtools)
test <- c("run_1","run_2", "run_11", "run_3")
mixedsort(test)
[1] "run_1"  "run_2"  "run_3"  "run_11"

使用tidyr/dplyr如何:

test %>% separate(run, into=c("prefix","suffix")) %>% arrange(as.numeric(suffix)) %>% mutate(new_test=apply( . , 1 , paste , collapse = "_" ))

 A tibble: 6 × 3
  prefix suffix new_test
   <chr>  <chr>    <chr>
1    run      1    run_1
2    run      2    run_2
3    run      3    run_3
4    run      4    run_4
5    run     11   run_11
6    run    111  run_111
test%%>%separate(run,into=c(“前缀”、“后缀”))%%>%arrange(as.numeric(后缀))%%>%mutate(new\u test=apply(,1,粘贴,折叠=“\u0”))
一个tibble:6×3
前缀后缀新_测试
1次运行1次运行1
2运行2运行2
3运行3运行3
4运行4运行4
5运行11运行11
6运行111运行111

使用tidyr/dplyr怎么样:

test %>% separate(run, into=c("prefix","suffix")) %>% arrange(as.numeric(suffix)) %>% mutate(new_test=apply( . , 1 , paste , collapse = "_" ))

 A tibble: 6 × 3
  prefix suffix new_test
   <chr>  <chr>    <chr>
1    run      1    run_1
2    run      2    run_2
3    run      3    run_3
4    run      4    run_4
5    run     11   run_11
6    run    111  run_111
test%%>%separate(run,into=c(“前缀”、“后缀”))%%>%arrange(as.numeric(后缀))%%>%mutate(new\u test=apply(,1,粘贴,折叠=“\u0”))
一个tibble:6×3
前缀后缀新_测试
1次运行1次运行1
2运行2运行2
3运行3运行3
4运行4运行4
5运行11运行11
6运行111运行111

能否重新标记它们
run\u 01
run02
,等等?可能缺少上下文..但不太明白为什么在排列后要在
测试中使用原始顺序?开始时是个糟糕的示例,抱歉。没问题。使用此数据添加了一个新的解决方案。能否重新标记它们
run\u 01
run02
,等等?可能缺少上下文..但不太明白为什么要在
test
after arrange中使用原始顺序?开始时是一个错误的示例,抱歉。没有问题。添加了具有此数据的新解决方案。对,
mixedsort
在这里没有帮助。但是
mixedorder
可以。我编辑了我的答案。谢谢@user28575Right,
mixedsort
在这里没有帮助。但是
mixedorder
可以。我编辑了我的答案。谢谢@user28575