【问题标题】:Plot aggregate with multiple columns and multiple variables绘制具有多列和多个变量的聚合
【发布时间】:2019-06-09 01:18:43
【问题描述】:

尝试从以下数据中绘制聚合数据。

  Person  Time Period Value  SMA2  SMA3  SMA4
   <chr>  <dbl>  <dbl> <dbl> <dbl> <dbl> <dbl>
 1 A          1      1    14  NA    NA    NA  
 2 A          2      1     8  11    NA    NA  
 3 A          3      1    13  10.5  11.7  NA  
 4 A          4      1    12  12.5  11    11.8
 5 A          5      1    19  15.5  14.7  13  
 6 A          6      1     9  14    13.3  13.2
 7 A          7      2    14  NA    NA    NA  
 8 A          8      2     7  10.5  NA    NA  
 9 A          9      2    11   9    10.7  NA  
10 A         10      2    14  12.5  10.7  11.5
# ... with 26 more rows

我已使用aggregate(DataSet[,c(4,5,6,7)], by=list(DataSet$Person), na.rm = TRUE, max) 获得以下信息:

  Group.1 Value SMA2     SMA3  SMA4
1       A    20 18.0 16.66667 15.25
2       B    20 17.0 16.66667 15.00
3       C    19 18.5 14.33333 14.50

我想在同一个图上绘制人 A、B 和 C 的每个 SMA 的最大值。

我还希望能够为每个 SMA 列绘制这些最大值的平均值。

感谢任何帮助。

【问题讨论】:

    标签: r max aggregate mean


    【解决方案1】:

    像这样?还是您在寻找不同的东西?

    df <- data.frame("Group.1"=c("A","B","C"), "Value"=c(20,20,20), 
                     "SMA2"=c(18.0, 17.0, 18.5), "SMA3" =c(16.667, 16.667, 14.333), 
                     "SMA4"=c(15.25, 15.00, 14.50))
    
    library(ggplot2)
    library(tidyr)
    
    df.g <- df %>%
      gather(SMA, Value, -Group.1)
    
    df.g$SMA <- factor(df.g$SMA, levels=c("Value", "SMA2", "SMA3", "SMA4"))
    
    means <- df.g %>%
      group_by(SMA) %>%
      summarise(m=mean(Value))
    
    ggplot(df.g, aes(x=SMA, y=Value, group=Group.1, colour=Group.1)) +
      geom_line() +
      geom_point(data=means, aes(x=SMA, y=m), inherit.aes = F)
    

    【讨论】:

    • 这正是我一直在寻找的,并且肯定会为我工作,但这是虚拟数据,对于我的真实数据,我将有 3-5 个组和 10 个 SMA 值。你知道任何其他的图表方式,这样我就不必手动输入整个数据框了吗? df &lt;- data.frame("Group.1"=c("A","B","C"), "Value"=c(20,20,20), "SMA2"=c(18.0, 17.0, 18.5), "SMA3" =c(16.667, 16.667, 14.333), "SMA4"=c(15.25, 15.00, 14.50))
    • 当您对原始数据框使用聚合时,您可以将其存储为对象(例如,df)并跳过输入聚合数据框。我只是没有其他方法可以按照您在问题中提供的格式输入您的数据。
    • 啊,天哪。所以我可以将aggregate(DataSet[,c(4,5,6,7)], by=list(DataSet$Person), na.rm = TRUE, max) 存储为对象。
    猜你喜欢
    • 2022-11-15
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 2015-04-23
    • 2021-03-24
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    相关资源
    最近更新 更多