如何转换数据以在R中创建分组箱线图?

时间:2020-10-20 20:27:28

标签: r dataframe ggplot2 boxplot

试图在R中使用ggplot创建分组框图时,我有些困惑。我有一个数据框,需要转换它才能获得所需的数据结构。

我的数据如下:

我有两个数据框:

# data frame 1: Method 1

F1 <- c(10,2,3,5,6)
F2 <- c(33, 45, 6, 8, 9)
F3 <- c(44, 55, 10, 23, 44)
Method <- rep("Method1", 5)
data1 = data.frame( F1, F2, F3, Method)

# data frame 2: Method 2

F1 <- c(11,5,3,8,6)
F2 <- c(31, 35, 6, 8, 11)
F3 <- c(44, 55, 12, 23, 41)
Method <- rep("Method2", 5)

data2 = data.frame( F1, F2, F3, Method)

我想创建一个分组的箱形图,比较两种方法的F1,F2和F3,为此,我对它们的数据帧进行了转换,以便在函数ggplot中输入正确的值。我认为正确的结构如下:

enter image description here

我为此编写了以下功能:

transform_data <- function(df){
  
dlist = list()
  
  for( f in names(df)){
    # The for loop means to create a df for each feature with the desired structure
    
    Values = df$f
    Method = df$method
    data = data.frame(column_value ,  pipeline)
    data$feature = f
    data append to dlist # Can't find the way to do this

  }
  final_df = do.call(rbind, dlist) # The created data frames are finally bound
  return(final_df)
}

将功能应用于两个数据帧后,我将同时绑定两个函数以获得最终数据帧“数据”。

所需的情节最终将是:

ggplot(data, aes(x=Feature, y=Values, fill=Method)) + 
  geom_boxplot()

我的数据框显然要复杂得多。 :(

任何评论都将受到欢迎。 非常感谢,

瑞秋

1 个答案:

答案 0 :(得分:1)

也许您正在寻找这个。您可以使用bind_rows()pivot_longer()保持方法变量。之后,您可以针对每种方法使用构面来设计图。这里的代码:

library(dplyr)
library(tidyr)
library(ggplot2)
#Code
data1 %>% bind_rows(data2) %>%
  pivot_longer(-Method) %>%
  ggplot(aes(x=name,y=value,fill=name))+
  geom_boxplot()+
  facet_wrap(.~Method,nrow = 1,strip.position = 'bottom')+
  theme_bw()+
  theme(strip.placement = 'outside',
        strip.background = element_blank())

输出:

enter image description here