【问题标题】:Averaging values in a column based on variable in another for line graph基于另一列中的变量为折线图平均列中的值
【发布时间】:2021-10-02 20:37:20
【问题描述】:

我希望能够对每个给定 Big.area 的 Small.area 中的值进行平均。 然后,我想绘制一个折线图,其中 X 为年份,Y 上的 small.area 值的平均值由 big.area 着色 - 即 Big.area 着色的平均 small.area 的每个值的一条线

Year Big.area Small.area Value
2011 A a 10
2011 A b 24
2011 B c 32
2011 B d 22
2012 A a 20
2012 A b 30
2012 B c 40
2012 B d 10
2013 A a 15
2013 A b 34
2013 B c 10
2013 B d 30
2014 A a 15
2014 A b 35
2014 B c 25
2014 B d 35

所以我最终会得到一个像这样的桌子

Year Big.area mean.small.areas
2011 A 17
2011 B 27
2012 A 25
2012 B 25
2013 A 24.5
2013 B 20
2014 A 25
2014 B 30

然后我可以使用 ggplot(df, aes(x= Year, y =mean.small.area, color = Big.area))+geom_line()

有什么想法吗? 感谢您的任何建议

【问题讨论】:

  • 是基于相同示例输入的平均值。我根据你的数据得到不同的方法with(df1, mean(Value[Big.area == "A" & Year == 2011])) [1] 17
  • 是的,抱歉,我刚刚编辑添加了正确的方法!
  • 如果以下解决方案有效,请考虑接受解决方案。谢谢

标签: r ggplot2


【解决方案1】:

我们可以通过summarise 方法使用组

library(ggplot2)
library(dplyr)
out <- df1 %>% 
    group_by(Year, Big.area) %>% 
    summarise(mean.small.area = mean(Value, na.rm = TRUE), 
      .groups = 'drop')

-输出

out
# A tibble: 8 x 3
   Year Big.area mean.small.area
  <int> <chr>              <dbl>
1  2011 A                   17  
2  2011 B                   27  
3  2012 A                   25  
4  2012 B                   25  
5  2013 A                   24.5
6  2013 B                   20  
7  2014 A                   25  
8  2014 B                   30  

并使用ggplot中的汇总数据

ggplot(out, aes(Year, y = mean.small.area, color = Big.area))+
       geom_line() + 
       theme_bw()

-输出

数据

df1 <- structure(list(Year = c(2011L, 2011L, 2011L, 2011L, 2012L, 2012L, 
2012L, 2012L, 2013L, 2013L, 2013L, 2013L, 2014L, 2014L, 2014L, 
2014L), Big.area = c("A", "A", "B", "B", "A", "A", "B", "B", 
"A", "A", "B", "B", "A", "A", "B", "B"), Small.area = c("a", 
"b", "c", "d", "a", "b", "c", "d", "a", "b", "c", "d", "a", "b", 
"c", "d"), Value = c(10L, 24L, 32L, 22L, 20L, 30L, 40L, 10L, 
15L, 34L, 10L, 30L, 15L, 35L, 25L, 35L)), class = "data.frame", row.names = c(NA, 
-16L))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    相关资源
    最近更新 更多