首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当他们在dplyr()中有underline_number时,排序列名?

当他们在dplyr()中有underline_number时,排序列名?
EN

Stack Overflow用户
提问于 2021-06-15 23:06:19
回答 5查看 51关注 0票数 1

我尝试使用arrange()按name_underline_number对列进行排序。它没有起作用。

在dplyr()中做这件事的最好方法是什么?

代码语言:javascript
复制
df <- structure(list(metric = c("rollmean_11", "rollmean_13", "rollmean_15", 
"rollmean_17", "rollmean_19", "rollmean_3", "rollmean_5", "rollmean_7", 
"rollmean_9"), MSE = c(1.92523924349549, 2.39347151053903, 2.89870886591451, 
3.4854131592187, 4.26101662911107, 0.651614338676069, 1.06260257822741, 
1.26237156422673, 1.55433498103862)), row.names = c(NA, -9L), class = c("tbl_df", 
"tbl", "data.frame"))

  metric        MSE
  <chr>       <dbl>
1 rollmean_11 1.93 
2 rollmean_13 2.39 
3 rollmean_15 2.90 
4 rollmean_17 3.49 
5 rollmean_19 4.26 
6 rollmean_3  0.652
7 rollmean_5  1.06 
8 rollmean_7  1.26 
9 rollmean_9  1.55 

预期输出

代码语言:javascript
复制
  metric        MSE
  <chr>       <dbl>
1 rollmean_3  0.652
2 rollmean_5  1.06 
3 rollmean_7  1.26 
4 rollmean_9  1.55 
5 rollmean_11 1.93 
6 rollmean_13 2.39 
7 rollmean_15 2.90 
8 rollmean_17 3.49 
9 rollmean_19 4.26 
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2021-06-15 23:15:36

它不起作用,因为作为一个字符串,11在2之前。

我们可以通过填充数字来系统地解决这个问题:

代码语言:javascript
复制
library(dplyr)
library(stringr)

df %>% 
  mutate(metric = str_replace(metric,
                              "\\d+",
                              \(i) str_pad(i, 2, pad = "0"))) %>%
  arrange(metric)

返回:

代码语言:javascript
复制
# A tibble: 9 x 2
  metric        MSE
  <chr>       <dbl>
1 rollmean_03 0.652
2 rollmean_05 1.06
3 rollmean_07 1.26
4 rollmean_09 1.55
5 rollmean_11 1.93
6 rollmean_13 2.39
7 rollmean_15 2.90
8 rollmean_17 3.49
9 rollmean_19 4.26
票数 1
EN

Stack Overflow用户

发布于 2021-06-15 23:11:00

这样做是可行的:

代码语言:javascript
复制
library(dplyr)
library(stringr)
df %>% arrange(as.numeric(str_extract(metric, '\\d+$')))
# A tibble: 9 x 2
  metric        MSE
  <chr>       <dbl>
1 rollmean_3  0.652
2 rollmean_5  1.06 
3 rollmean_7  1.26 
4 rollmean_9  1.55 
5 rollmean_11 1.93 
6 rollmean_13 2.39 
7 rollmean_15 2.90 
8 rollmean_17 3.49 
9 rollmean_19 4.26 
票数 2
EN

Stack Overflow用户

发布于 2021-06-15 23:41:18

我们可以使用readr中的parse_number来提取数字部分,并在arrange中使用它

代码语言:javascript
复制
library(dplyr)
df %>%
     arrange(readr::parse_number(metric))

-output

代码语言:javascript
复制
# A tibble: 9 x 2
  metric        MSE
  <chr>       <dbl>
1 rollmean_3  0.652
2 rollmean_5  1.06 
3 rollmean_7  1.26 
4 rollmean_9  1.55 
5 rollmean_11 1.93 
6 rollmean_13 2.39 
7 rollmean_15 2.90 
8 rollmean_17 3.49 
9 rollmean_19 4.26 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67988864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档