Как я могу преобразовать свои данные для создания сгруппированной диаграммы в R?

#r #dataframe #ggplot2 #boxplot

#r #dataframe #ggplot2 #boxplot

Вопрос:

Я немного запутался, пытаясь создать сгруппированную прямоугольную диаграмму с помощью ggplot в R. У меня есть фрейм данных, который мне нужно преобразовать, чтобы получить желаемую структуру данных для этого.

Мои данные выглядят следующим образом:

У меня есть два фрейма данных:

 # 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. Я думаю, что правильная структура будет следующей:

введите описание изображения здесь

Для которого я написал следующую функцию:

 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:

Возможно, вы ищете это. Вы можете использовать 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())
  

Вывод:

введите описание изображения здесь