【问题标题】:How can I sort levels in columns of listed dataframes manually in R?如何在 R 中手动对列出的数据框列中的级别进行排序?
【发布时间】:2020-11-13 10:34:15
【问题描述】:

我有三个类似的数据框:

    Value Time Colour  Fruit 
1    9.0    1  Orange  Apple 
2    9.5    2  Orange  Apple 
3   10.0    1  Red     Apple 
4    9.0    2  Blue    Apple 
5    9.5    1  Blue    Apple 
6   10.0    2  Blue    Pear
7    1.0    1  Blue    Pear 
8    2.0    2  Red     Pear 
9    3.0    1  Red     Pear 
10   2.0    2  Orange  Pear 
11   1.0    1  Blue    Mango 
12   3.0    2  Blue    Mango
13   2.0    2  Red     Mango
14   3.0    1  Red     Mango
15   2.0    2  Orange  Mango
16   1.0    1  Blue    Banana 
17   3.0    2  Blue    Banana
18   2.0    2  Red     Banana
19   3.0    1  Red     Banana
20   2.0    2  Orange  Banana 

...列在 my_list 中:

my_list<- list(df1=df1, df2=df2, df3=df3)

为了稍后绘制数据(使用 facet_grid 分组条形图),我想重新调整 Fruit 和 Color 的值,就像使用 fct_relevel 对单个数据帧所做的那样:

Data <- Data %>% 
  mutate(Colour = fct_relevel(Colour,"Blue", "Red", "Orange")) %>% 
  mutate(Fruit  = fct_relevel(Fruit, "Apple", "Mango", "Banana", "Pear"))

感谢您的帮助!

【问题讨论】:

    标签: r list sorting levels


    【解决方案1】:

    由于您使用的是 dplyr,因此一种方法是使用来自 purrrmap

    library(dplyr)
    library(purrr)
    mylist <- my_list %>% 
      map(~ .x %>%
            mutate(Colour = fct_relevel(Colour,"Blue", "Red", "Orange")) %>%
            mutate(Fruit = fct_relevel(Fruit, "Apple", "Mango", "Banana", "Pear")))
    

    【讨论】:

      【解决方案2】:

      假设 df 的级别都相同,您可以使用 lapply 循环遍历 df 的列表。

      my_list <- lapply(my_list, function(x){ x %>% 
                                               mutate(Colour = fct_relevel(Colour,"Blue", "Red", "Orange"), 
                                                      Fruit = fct_relevel(Fruit, "Apple", "Mango", "Banana", "Pear"))
      })
      

      【讨论】:

        猜你喜欢
        • 2020-06-19
        • 1970-01-01
        • 2016-07-28
        • 1970-01-01
        • 2022-09-27
        • 2022-12-18
        • 2019-03-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多