处理字母和数字时,arrange() 不起作用

Lar*_*ury 0 r dataframe dplyr tidyr tidyverse

我看过很多与arrange()问题相关的帖子,但没有一个能解决我的情况,希望这不是重复的。我有一些名为“Q1”、“Q2”、“Q3”等的列。使用 计算一些基本的描述性统计数据后rstatix::get_summary_stats(),我需要按升序排列新列variable,Q1 在 Q2 在 Q3 之前,等等)。我确信这是一个愚蠢的问题,但我看不出我做错了什么。

  • 原始数据如下所示:
ID Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11 Q12 Q13 Q14 Q15
1 PART1  4  1  1  5  5  5  1  5  1   1   3   5   5   1   5
2 PART2  5  4  1  5  5  4  1  5  2   1   3   5   4   1   5
3 PART3  2  4  3  5  5  4  1  5  2   1   3   5   4   1   5
so on...
Run Code Online (Sandbox Code Playgroud)
  • 我的尝试:
descriptive <-  data %>% 
  rstatix::get_summary_stats(show = c("mean", "sd", "median", "iqr", "min", "max"))  %>% 
  mutate_if(is.numeric, round, 2) %>% 
  dplyr::arrange(variable) 
Run Code Online (Sandbox Code Playgroud)
  • 前 10 行:
A tibble: 15 x 8
   variable     n  mean    sd median   iqr   min   max
   <chr>    <dbl> <dbl> <dbl>  <dbl> <dbl> <dbl> <dbl>
 1 Q1          63  3.94  1.03      4   2       2     5
 2 Q10         63  1.84  0.88      2   2       1     3
 3 Q11         63  2.62  1.31      3   3       1     5
 4 Q12         63  3.98  1.01      4   2       2     5
 5 Q13         63  4.33  0.8       5   1       2     5
 6 Q14         63  1.91  0.88      2   2       1     4
 7 Q15         63  4.25  0.95      5   1       2     5
 8 Q2          63  2.86  1.58      3   3       1     5
 9 Q3          63  1.97  1.06      2   2       1     4
10 Q4          63  3.98  1.04      4   2       2     5
Run Code Online (Sandbox Code Playgroud)

注意:我已经尝试ungroup()过了across(starts_with("Q*"))),但没有任何作用。任何想法将不胜感激,谢谢adv。

  • 数据:
> dput(descriptive)[1:10, ]
structure(list(variable = c("Q1", "Q10", "Q11", "Q12", "Q13", 
"Q14", "Q15", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7", "Q8", "Q9"), 
    n = c(63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 
    63, 63), mean = c(3.94, 1.84, 2.62, 3.98, 4.33, 1.91, 4.25, 
    2.86, 1.97, 3.98, 4.21, 4.05, 2.38, 4.03, 2.25), sd = c(1.03, 
    0.88, 1.31, 1.01, 0.8, 0.88, 0.95, 1.58, 1.06, 1.04, 0.94, 
    1.04, 1.36, 1.05, 1.12), median = c(4, 2, 3, 4, 5, 2, 5, 
    3, 2, 4, 4, 4, 2, 4, 2), iqr = c(2, 2, 3, 2, 1, 2, 1, 3, 
    2, 2, 1, 2, 2.5, 2, 2), min = c(2, 1, 1, 2, 2, 1, 2, 1, 1, 
    2, 2, 1, 1, 2, 1), max = c(5, 3, 5, 5, 5, 4, 5, 5, 4, 5, 
    5, 5, 5, 5, 5)), row.names = c(NA, -15L), class = c("tbl_df", 
"tbl", "data.frame"))
Run Code Online (Sandbox Code Playgroud)

lan*_*ang 5

只用怎么样arrange()只用在 的整数部分variable

\n
descriptive %>% arrange(as.integer(gsub("Q","",variable)))\n
Run Code Online (Sandbox Code Playgroud)\n

输出:

\n
# A tibble: 15 \xc3\x97 8\n   variable     n  mean    sd median   iqr   min   max\n   <chr>    <dbl> <dbl> <dbl>  <dbl> <dbl> <dbl> <dbl>\n 1 Q1          63  3.94  1.03      4   2       2     5\n 2 Q2          63  2.86  1.58      3   3       1     5\n 3 Q3          63  1.97  1.06      2   2       1     4\n 4 Q4          63  3.98  1.04      4   2       2     5\n 5 Q5          63  4.21  0.94      4   1       2     5\n 6 Q6          63  4.05  1.04      4   2       1     5\n 7 Q7          63  2.38  1.36      2   2.5     1     5\n 8 Q8          63  4.03  1.05      4   2       2     5\n 9 Q9          63  2.25  1.12      2   2       1     5\n10 Q10         63  1.84  0.88      2   2       1     3\n11 Q11         63  2.62  1.31      3   3       1     5\n12 Q12         63  3.98  1.01      4   2       2     5\n13 Q13         63  4.33  0.8       5   1       2     5\n14 Q14         63  1.91  0.88      2   2       1     4\n15 Q15         63  4.25  0.95      5   1       2     5\n
Run Code Online (Sandbox Code Playgroud)\n