R: создал матрицу, но не может создать с ней столбчатую диаграмму

#r #dataframe #ggplot2 #bar-chart

#r #dataframe #ggplot2 #столбчатая диаграмма

Вопрос:

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

 library(ggplot2)
library(dplyr)

#create dataframe
df_conversionrates <- data.frame(matrix(ncol = 7, nrow = 2))
colnames(df_conversionrates) <- (days = c("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"))
rownames(df_conversionrates) <- (category = c("conversionrate_control","conversionrate_treatment"))

#calculate conversion rates
for (g in 1:2)
 {
   for(n in 1:7)
     {
    df_conversionrates[g,n] <- nrow(filter(rocketfuel, test==(g-1) amp; mode_impr_day==n amp; converted==1))/nrow(filter(rocketfuel,mode_impr_day==n))*100
   }
}
  

пожалуйста, посмотрите на изображение фрейма данных, как это выглядит, я пытаюсь добавить 2 столбчатых графика для каждого дня в соответствии с двумя категориями по оси y

Комментарии:

1. Пожалуйста, не создавайте больше работы для других людей, вандализируя свои сообщения. Размещая в сети Stack Exchange, вы предоставляете Stack Exchange не подлежащее отзыву право в соответствии с лицензией CC BY-SA 4.0 на распространение этого контента (т. Е. Независимо от ваших будущих решений). Согласно политике обмена стеками, распространяется версия post, не подвергшаяся вандализму. Таким образом, любой вандализм будет отменен. Если вы хотите узнать больше об удалении записи, пожалуйста, смотрите: Как работает удаление?

Ответ №1:

Вам нужно, чтобы ваши данные были в длинном формате, чтобы заставить ggplot работать с этими данными. Ваши данные не были воспроизводимы (без транскрибирования вашего изображения), поэтому ниже приведено приблизительное представление ваших данных:

 df_conversionrates <- 
  data.frame(matrix(c(0.09, 0.05, 0.067, 0.095, 0.067, 0.05, 0.073,
                      3.2, 2.9, 2.4, 2.1, 2.2, 2.1, 2.4), 
                    byrow = TRUE, nrow = 2))
  

Мы можем преобразовать данные в фрейм данных длинного формата, используя stack функцию base R, и добавить уровень фактора, чтобы указать, имеем ли мы в виду группу лечения или контрольную группу:

 df <- stack(df_conversionrates)
df$group <- factor(rep(c("control", "treatment"), 7))
  

Это означает, что df теперь это выглядит так:

 df
#>    values       ind     group
#> 1   0.090    Monday   control
#> 2   3.200    Monday treatment
#> 3   0.050   Tuesday   control
#> 4   2.900   Tuesday treatment
#> 5   0.067 Wednesday   control
#> 6   2.400 Wednesday treatment
#> 7   0.095  Thursday   control
#> 8   2.100  Thursday treatment
#> 9   0.067    Friday   control
#> 10  2.200    Friday treatment
#> 11  0.050  Saturday   control
#> 12  2.100  Saturday treatment
#> 13  0.073    Sunday   control
#> 14  2.400    Sunday treatment
  

Теперь построение графика простое:

 ggplot(df, aes(ind, values, fill = group))   
  geom_col(position = position_dodge())  
  labs(x = "Weekday", y = "Value")
  

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