【问题标题】:Summing Columns conditionally prior to use in HeatMap GGPLOT2 in R?在R中的HeatMap GGPLOT2中使用之前有条件地对列进行求和?
【发布时间】:2015-03-31 00:19:40
【问题描述】:

我正在使用 R 中的 ggplot2 从大约 7000 个条目的数据集在 R 中创建一个 HeatMap,但我对结果感到不舒服,因为我的情节图例说明了我知道单个实例具有的“Vol”值,而且我我想绘制月份/星期组合的总交易量。

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

基本上,我希望在绘图时或之前在所有 217 个单元格上完成类似于 Excel 中的以下操作。

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

当月的第一天是星期三,例如 Excel 声明它是“6098822”,而“6756753”是星期四的一个月的第一天;超过下方 HeatMap 的最大密度。

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

有人可以指出我应该做什么并准确解释 GGPLOT2 在下面做什么,例如它是否使用它为情节找到的第一个组合?

注意: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")

这会产生图表:

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    您可以通过设计数据来测试ggplot 的行为,以便轻松了解ggplot 的处理方式。

    例如,下面是创建数据集的 R 代码,该数据集在最后四行重复前 4 行。但是,在重复的底部 4 行中,Vol 值是负数。运行这个看看:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-29
      • 2022-10-06
      • 2021-12-29
      • 2021-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-19
      相关资源
      最近更新 更多