Как лучше всего обобщить распределение данных на основе категориальной переменной? Я пытаюсь смоделировать звонки в зависимости от дня недели

У меня есть кадр данных, который содержит дату, день недели (категориальный) и количество вызовов (числовой). Я пытаюсь провести аналитику того, как распределяется объем звонков по дням недели. Используя пакет решетки, я смог создать гистограмму, но мне все еще нужна дополнительная помощь:

  1. Как я могу упорядочить/отсортировать переменные дня недели, которые появляются в моей гистограмме (я хочу, чтобы она начиналась в субботу, затем в воскресенье, затем в понедельник,...)?

  2. Я также хотел бы перенести распределение так, чтобы гистограммы были вертикальными, а не горизонтальными.

  3. Наконец, как я могу добавить график типа «коробка с усами»? Должен ли я все еще использовать tapply для этого?

Спасибо!

Вот что я сделал до сих пор:

LatinoDRTVdata <- read.csv("//dishfs1/Marketing/Mktg_Analytics/Team Member folders/Ryan_Chase/Ad Hoc/Latino DRTV Normalized Calls.csv")

#look at the first 10 rows
head(LatinoDRTVdata)

#look at the full dataset
LatinoDRTVdata

#look at the column names
colnames(LatinoDRTVdata)

#check the class of the Normalized.Latino.DRTV.call.volume column
class(LatinoDRTVdata$Normalized.Latino.DRTV.call.volume)

##make  the call volume a numeric vector 
LatinoDRTVdata$Normalized.Latino.DRTV.call.volume <- as.numeric(LatinoDRTVdata$Normalized.Latino.DRTV.call.volume)

#now check the class again
class(LatinoDRTVdata$Normalized.Latino.DRTV.call.volume)
(LatinoDRTVdata$Normalized.Latino.DRTV.call.volume)

#194 calls is the mean volume regardless of the day
mean(LatinoDRTVdata$Normalized.Latino.DRTV.call.volume)

#Day of the week is a factor
class(LatinoDRTVdata$Day.of.the.Week)

summary(LatinoDRTVdata)

str(LatinoDRTVdata)

#histogram of daily Latino DRTV call volume
hist(LatinoDRTVdata$Normalized.Latino.DRTV.call.volume)

#find the mean of each day
Daily.Latino.DRTV.Distribution<- tapply(LatinoDRTVdata$Normalized.Latino.DRTV.call.volume,LatinoDRTVdata$Day.of.the.Week,mean)

Daily.Latino.DRTV.Distribution

Daily.Latino.DRTV.Distribution$ormalized.Latino.DRTV.call.volume

##check that a new object has been added
ls()

str(Daily.Latino.DRTV.Distribution)

#make sure you install the lattice package for the graphics
#load the lattice package
library(lattice)
barchart(Daily.Latino.DRTV.Distribution)

вот первые 10 строк моих данных:

> head(LatinoDRTVdata)
      Date Day.of.the.Week Normalized.Latino.DRTV.call.volume
1 3/1/2013          Friday                                384
2 3/2/2013        Saturday                                277
3 3/3/2013          Sunday                                178
4 3/4/2013          Monday                                400
5 3/5/2013         Tuesday                                410
6 3/6/2013       Wednesday                                404
> 

person Ryan Chase    schedule 02.02.2015    source источник
comment
в основном вы хотите горизонтальную гистограмму с упорядоченным днем ​​​​недели и добавить график с усами поверх столбцов? не могли бы вы вставить некоторые образцы данных в фрейм данных с именем df или вставить вывод из 10 строк ваших данных?   -  person vagabond    schedule 02.02.2015
comment
Я добавил первые 10 строк моих данных. Спасибо.   -  person Ryan Chase    schedule 02.02.2015


Ответы (1)


  1. Установите порядок факторов DotW, повторно объявив его.

    levels(LatinoDRTVdata$Day.of.the.Week) <- c("Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday")`
    
  2. Используйте пакет ggplot для создания горизонтальных полос.

    library(ggplot2)
    ggplot(LatinoDRTVdata, aes(x=Day.of.the.Week, y=Normalized.Latino.DRTV.call.volume)) + geom_bar() + coord_flip()
    

    Не похоже, что данные, которые вы используете для построения графика, суммируются в подсчетах, но если это так, вам нужно добавить аргумент geom_bar(stat='identity'). Горизонтальная полоса появляется функцией coord_flip().

  3. Небольшая модификация 2.

    ggplot(LatinoDRTVdata, aes(x=Day.of.the.Week, y=Normalized.Latino.DRTV.call.volume)) + geom_boxplot()
    

Хороший ресурс для ggplot: поваренная книга для R.

person Gary Chung    schedule 02.02.2015
comment
Привет, Гэри, спасибо за ответ! Я все еще новый пользователь R ... можете ли вы объяснить в # 1, как R узнает, что нужно присвоить Sat значениям фактора, который в настоящее время называется субботой? Я получаю сообщение об ошибке: Ошибка в уровнях (LatinoDRTVdata$Day.ofthe.Week) ‹- c(Sat, Sun, Mon, : попытка установить атрибут NULL – ....также, можете ли вы сказать мне, как форматировать ваши ответы на комментарии на StackExchange? - person Ryan Chase; 03.02.2015
comment
Привет, Райан, я обновил ответ, чтобы помочь ответить на ваш вопрос (до того, как я не знал, как был отформатирован ваш фактор DotW, поэтому я просто догадался). Используя точную метку фактора «Суббота», а не «Сб», вы устраняете двусмысленность. Дать ему шанс. Убедитесь, что это действительно фактор, используя is.factor(data$DotW) для проверки и, при необходимости, data$DotW <- as.factor(data$DotW) для преобразования. Чтобы добавить блоки кода в комментарий, окружите код обратными кавычками (клавиша над Tab). - person Gary Chung; 03.02.2015