在 R 中的 HeatMap GGPLOT2 中使用之前有条件地对列求和?

Summing Columns conditionally prior to use in HeatMap GGPLOT2 in R?

我正在使用 R 中的 ggplot2 从大约 7000 个条目的数据集中在 R 中创建一个热图,但由于我的情节说明 "Vol" 值的传说,我对结果感到不舒服我知道单个实例有,并且我想绘制月中某天/星期几组合的总体积。

所以我的新手假设是 ggplot2 不会自动聚合值,或者我在绘图之前遗漏了一些东西。

基本上,我希望在绘图时或之前对所有 217 个单元格执行与 Excel 中类似的操作。

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

例如,对于本月的第一天,即星期三,Excel 表示本月的第一天在星期四,它是“6098822”和“6756753”;超过下面热图的最大密度。

很可能我只是缺少生成正确聚合组合的基本聚合函数。

Can someone point out what I should be doing and explain exactly what GGPLOT2 is doing below such as is it using the first combination it finds for the plot?

注:DoY ->1,365 DofM->1-31 DofW->Sun-Sat

我的数据如下所示:

> 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")

这将生成图表:

您可以通过设计数据来测试 ggplot 在做什么,以便更容易地了解 ggplot 如何处理它。

例如,下面是创建数据集的 R 代码,该数据集的前 4 行在后四行中重复。但是,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 仅使用组合 DofM,DofW 的最后一个 Vol 值。现在要了解您真正想做的事情,请总结 DofM,DofW 组合的重复 Vol 值。我选择的武器是 Rsqldf(SQL 数据框)。这是在 R.

中使用 SQL 的一种方式
# 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)