【问题标题】:ggpubr: sort by group but with different sorting order (asc, desc)ggpubr:按组排序,但排序顺序不同(asc,desc)
【发布时间】:2021-10-07 00:28:33
【问题描述】:

我想按组对数据进行排序,然后为每个组按不同的顺序(升序、无序、降序)排序,但似乎ggpubrsort.val 参数只取长度为 1 的值。我我想知道我可以采取哪些替代方法来使输出达到预期的结果而无需进行大量修改?

我将使用mtcars 数据作为说明性示例。数据按cyl组(3组)排序并以asc顺序呈现,是否可以为三个组分配不同的排序顺序?比如说,“asc”、“none”、“desc”? (我试过c("asc", "none", "desc"),但没用)。

以下是我的最小工作示例。

# Require the package
library(ggpubr)


data("mtcars")
dfm <- mtcars
# Convert the cyl variable to a factor
dfm$cyl <- as.factor(dfm$cyl)
# Add the name colums
dfm$name <- rownames(dfm)
# Inspect the data
head(dfm[, c("name", "wt", "mpg", "cyl")])

# Sort by group and by ascending order

ggbarplot(dfm, x = "name", y = "mpg",
          fill = "cyl",       # change fill color by cyl
         color = "white", # Set bar border colors to white
          palette = "jco",  # jco journal color palett. 
          sort.val = "asc",  # Sort the value in dscending order 
          sort.by.groups = TRUE, # Sort inside each group
          x.text.angle = 90 # Rotate vertically x axis texts
          )

【问题讨论】:

    标签: r sorting grouping ggpubr


    【解决方案1】:

    这是第一次数据操作的另一种方式:

    1. 第一列的行名rownames_to_column
    2. cyl 因素
    3. 在使用 ifelse 语句将 sort 分组后
    4. 和重要的arrange cyl
    library(tidyverse)
    library(ggpubr)
    
    dfm <- mtcars %>% 
        rownames_to_column("name") %>% 
        mutate(cyl = as_factor(cyl)) %>% 
        group_by(cyl) %>% 
        mutate(mpg=ifelse(cyl==4, sort(mpg), mpg),
               mpg=ifelse(cyl==8, sort(mpg, decreasing = TRUE), mpg)
        ) %>% 
        arrange(cyl)
    
    # plot
    ggbarplot(dfm, x = "name", y = "mpg",
              fill = "cyl",       # change fill color by cyl
              color = "white", # Set bar border colors to white
              palette = "jco",  # jco journal color palett.  
              x.text.angle = 90 # Rotate vertically x axis texts
    )
    

    【讨论】:

      【解决方案2】:

      我不知道是否可以在 ggpubrggbarplot 函数内进行,但这是一种通过操纵因子水平的方法。

      我们创建一个数据框 (order_data),其中包含我们希望为每个组对数据进行排序的顺序。在这里,我使用约定 1 为升序,0 为无序,-1 为降序。

      library(dplyr)
      library(ggpubr)
      
      order_data <- data.frame(cyl = factor(c(4, 6, 8)), order = c(1, 0, -1))
      order_data
      
      #  cyl order
      #1   4     1
      #2   6     0
      #3   8    -1
      

      order 值与mpgarrange 数据相乘,根据它们的出现和绘图将名称值作为因子。

      dfm %>%
        left_join(order_data, by = 'cyl') %>%
        arrange(cyl, mpg * order) %>%
        mutate(name = factor(name, name)) %>%
        ggbarplot(x = "name", y = "mpg",
                fill = "cyl",       # change fill color by cyl
                color = "white", # Set bar border colors to white
                palette = "jco",  # jco journal color palett. 
                x.text.angle = 90 # Rotate vertically x axis texts
      )
      

      【讨论】:

        猜你喜欢
        • 2014-07-11
        • 1970-01-01
        • 2013-08-14
        • 1970-01-01
        • 2021-12-13
        • 2015-03-05
        • 2020-09-12
        • 1970-01-01
        • 2014-08-29
        相关资源
        最近更新 更多