R “安排订单”;运行“U 1”;然后是“;运行“U 2”;而不是",;运行“U 11”;
我有一个类似下面的tibbleR “安排订单”;运行“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
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