【问题标题】:calculate and plot time interval means计算并绘制时间间隔均值
【发布时间】:2017-02-18 14:34:21
【问题描述】:

我想使用 dplyr 和 ggplot2 计算和绘制不同颜色动物随时间变化的数量。

我在随机日期对不同动物进行了观察,因此我首先想将这些观察结果分组到 4 天的括号中,然后计算每个 4 天括号的平均颜色。我为前几个创建了带有噱头结果的 Bracket.mean 列,只是为了展示我的想法。如果可能的话,我想在同一个数据框中添加这些方法(而不是创建一个新的 data.frame 或向量)以供以后分析和绘图。

对于该图,我希望显示括号均值及其周围的某种方差度量(SD 或箱线图)以及随时间推移的每日观察结果(可能是背景中观察结果的褪色叠加)。

下面是我正在使用的数据集的一部分(我希望计算一个组成的“Bracket.mean”列)。 “计数”是特定“颜色”的给定“日期”内的动物数量。

    Date    Julian  Count   Color   Bracket.color
4/19/16 110 1   50  mean of 4/19-4/22
4/19/16 110 1   50  mean of 4/19-4/22
4/19/16 110 1   100 mean of 4/19-4/22
4/20/16 111 4   50  mean of 4/19-4/22
4/20/16 111 1   0   mean of 4/19-4/22
4/20/16 111 2   100 mean of 4/19-4/22
4/20/16 111 1   50  mean of 4/19-4/22
4/20/16 111 2   100 mean of 4/19-4/22
4/21/16 112 1   100 mean of 4/19-4/22
4/21/16 112 2   50  mean of 4/19-4/22
4/21/16 112 4   50  mean of 4/19-4/22
4/21/16 112 1   100 mean of 4/19-4/22
4/21/16 112 2   50  mean of 4/19-4/22
4/21/16 112 1   0   mean of 4/19-4/22
4/22/16 113 2   0   mean of 4/19-4/22
4/22/16 113 4   50  mean of 4/23-4/26
4/23/16 114 6   0   mean of 4/23-4/26
4/23/16 114 1   50  mean of 4/23-4/26
4/24/16 115 2   0   mean of 4/23-4/26
4/26/16 117 5   0   mean of 4/23-4/26
4/30/16 121 1   50  
5/2/16  123 1   NA  
5/2/16  123 1   50  
5/7/16  128 2   0   
5/7/16  128 3   0   
5/7/16  128 3   0   
5/8/16  129 4   0   
5/8/16  129 1   0   
5/10/16 131 1   50  
5/10/16 131 4   50  
5/12/16 133 1   0   
5/13/16 134 1   50  
5/14/16 135 1   0   
5/14/16 135 2   50  
5/14/16 135 2   0   
5/14/16 135 1   0   
5/17/16 138 1   0   
5/17/16 138 2   0   
5/23/16 144 1   0   
5/24/16 145 4   0   
5/24/16 145 1   0   
5/24/16 145 1   0   
5/27/16 148 3   NA  
5/27/16 148 1   0   
5/27/16 148 1   50  

任何帮助将不胜感激。提前非常感谢!

【问题讨论】:

    标签: r ggplot2 dplyr timeserieschart group-summaries


    【解决方案1】:

    这样的事情应该可以帮助您入门。

    library(dplyr)
    df <- df %>% mutate(Date = as.Date(Date, format='%m/%d/%y'),
                        Start = as.Date(cut(Date, breaks= seq(min(Date), max(Date)+4, by = 4)))) %>%
        mutate(End = Start+3) %>%
        group_by(Start,End) %>%
        summarise(meanColor = mean(Color, na.rm=T),
                  sdColor = sd(Color, na.rm=T))
    df
    #Source: local data frame [10 x 4]
    #Groups: Start [?]
    #        Start        End meanColor  sdColor
    #        <date>     <date>     <dbl>    <dbl>
    #1  2016-04-19 2016-04-22  56.25000 35.93976
    #2  2016-04-23 2016-04-26  12.50000 25.00000
    #3  2016-04-27 2016-04-30  50.00000       NA
    #4  2016-05-01 2016-05-04  50.00000       NA
    #5  2016-05-05 2016-05-08   0.00000  0.00000
    #6  2016-05-09 2016-05-12  33.33333 28.86751
    #7  2016-05-13 2016-05-16  20.00000 27.38613
    #8  2016-05-17 2016-05-20   0.00000  0.00000
    #9  2016-05-21 2016-05-24   0.00000  0.00000
    #10 2016-05-25 2016-05-28  25.00000 35.35534
    

    然后使用,

    library(ggplot)
    ggplot(df) + geom_line(aes(Start,meanColor))
    

    【讨论】:

    • 太好了,非常感谢!请再做两件事: 1. 您能否在 4 天平均计算中加入在某些情况下记录了多个处于特定“颜色”阶段的动物的事实? -- 如“计数”列中给出的(例如,在“日期”4/20 上有 5 (=4+1) 只“颜色”类型为 50 的动物)。 2. 新的'Start'和'meanColor'变量可以加到同一个d.f中吗?作为原始的“颜色”观察结果,所以我可以在同一个图中绘制“平均颜色”和单个“颜色”观察值(如果可能,如果“计数”> 1,则显示所有观察值)?谢谢!
    • Color 添加到group_by() 以获取附加维度。如果要将数据添加到原始数据框中,请将summarise() 替换为mutate()
    • 太好了,变异有效!但至于我的附加问题 #1:与让每一行代表一个单独的动物观察相反,我有一些以该颜色观察到的动物。有时它只是一个人(Count=1),但有时更多(例如,在 4/22 上有 4 个不同的人,颜色为 50:Count=4)。所以我试图将“计数”变量包含在平均值的计算中(命令 group_by(Start, End) 很好)。我是否需要复制并粘贴 4/22 观察等三个相同的行以修复它还是有其他方法?Thx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多