2015-03-31 2 views
0

Я создаю HeatMap в R из набора данных около 7000 записей с использованием ggplot2 в R, но мне не нравится, потому что легенда моего сюжета о том, что значения «Vol» мне известны, и я желая построить общий объем для комбинации «День месяца/дня недели».Подсчет столбцов условно перед использованием в HeatMap GGPLOT2 в R?

Итак, мое предположение для начинающих - ggplot2 не автоагрегирует значения, или я пропускаю что-то до построения графика.

В принципе, я хочу, чтобы что-то похожее на следующее в Excel было сделано для всех 217 ячеек в точке построения или раньше.

=SUMIFS(C2:C9999,D2:D9999,"1",F2:F9999,"Wed")

Что в первый день месяца, который в среду, например Excel говорится, что это «6098822» и «6756753» на 1-й день месяца на четверг; больше максимальной плотности HeatMap ниже.

Скорее всего, я просто пропустил базовую функцию агрегации для получения правильных комбинаций агрегации.

Может кто-нибудь указать, что я должен делать, и объяснить, что именно делает GGPLOT2, например, используя первую комбинацию, которую он находит для сюжета?

Примечание: Да -> 1365 DofM-> 1-31 DofW-> Вс-Сб

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

> head(AC3,10) 
    DD  Date Vol DofM DoY DofW 
1 1 01/01/97 28857 1 1 Wed 
2 2 01/02/97 37757 2 2 Thu 
3 3 01/03/97 41394 3 3 Fri 
4 4 01/04/97 39614 4 4 Sat 
5 5 01/05/97 32735 5 5 Sun 
6 6 01/06/97 33536 6 6 Mon 
7 7 01/07/97 33547 7 7 Tue 
8 8 01/08/97 34205 8 8 Wed 
9 9 01/09/97 35804 9 9 Thu 
10 10 01/10/97 42895 10 10 Fri 


>p<-ggplot(AC3,aes(DofM,DofW)) 
>p + geom_tile(aes(fill=Vol)) + scale_fill_gradient(low="white", high="darkblue") + xlab("Day of Month") + ylab("Day of Week") 

Это приводит график:

enter image description here

ответ

1

Вы можете проверить, что ggplot делает б y придумывая данные, чтобы упростить работу, как обрабатывает ggplot.

Например, ниже приведен R-код для создания набора данных, в котором четыре последних строки повторяются в последних четырех строках. Однако значения Vol отрицательны на повторяющихся нижних 4 строках. Выполнить это, чтобы увидеть:

# take in data similar to what was show in question 
AC3<-scan(what=list(id=0,DD=0,Date="",Vol=0,DofM=0,DoY=0,DofW="")) 
1 1 01/01/97 28857 1 1 Wed 
2 2 01/02/97 37757 2 2 Thu 
3 3 01/03/97 41394 3 3 Fri 
4 4 01/04/97 39614 4 4 Sat 
5 5 01/01/97 -8857 1 1 Wed 
6 6 01/02/97 -7757 2 2 Thu 
7 7 01/03/97 -1394 3 3 Fri 
8 8 01/04/97 -9614 4 4 Sat 

#turn into data.frame for ggplot 
AC3<-as.data.frame(AC3) 

# do the plottin' 
require(ggplot2) 
ggp2 <- ggplot(AC3,aes(DofM,DofW)) 
ggp2 <- ggp2 + geom_tile(aes(fill=Vol)) 
ggp2 <- ggp2 + scale_fill_gradient(low="white",high="darkblue") 
ggp2 <- ggp2 + xlab("Day of Month") 
ggp2 <- ggp2 + ylab("Day of Week") 
print(ggp2) 

Вы можете увидеть ggplot просто использует последнее Vol значение комбинации DofM,DofW. Теперь, чтобы понять, что вы действительно хотите сделать, суммируйте повторяющиеся значения Vol для комбинаций DofM,DofW. Моим оружием выбора является библиотека Rsqldf (кадр данных SQL). Это способ использования SQL в R.

# need to install sqldf: install.packages("sqldf",dep=TRUE) 
require(sqldf) 
# sql query to add all Vol values for unique DofM, DofW combinations 
AC4<-sqldf(paste("select DofM, DofW, sum(Vol) as newvol" 
       ,"from AC3" 
       ,"group by DofM, DofW" 
       )) 
# see if you agree with the output: 
print(AC4) 
Смежные вопросы