簡體   English   中英

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

[英]Summing Columns conditionally prior to use in HeatMap GGPLOT2 in R?

我正在R中使用ggplot2從R中的大約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")

產生圖:

在此處輸入圖片說明

您可以通過ggplot數據來測試ggplot的功能,從而輕松確定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僅使用組合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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM