在 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
值。我选择的武器是 R
库 sqldf
(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)
我正在使用 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
值。我选择的武器是 R
库 sqldf
(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)