【问题标题】:Calculate mean difference by group按组计算平均差
【发布时间】:2021-01-12 08:01:49
【问题描述】:

如果这是一个非常琐碎的问题,请原谅;我是 R 新手。假设我有这个数据集:

data
    puppy Measurement_Year Weight
1   Bella             1991    1.0
2   Bella             1993    1.2
3   Bella             1998    7.0
4 Charlie             1997    2.0
5 Charlie             1998    2.5
6  Cooper             1998   12.0

...我正在尝试确定幼犬的平均体重从称重的第一年到最后一年是增加还是减少。

手动,我会说:在他们称重的第一年,贝拉重 1 公斤,查理 2 公斤,铜 12 公斤。这意味着他们在第一年的平均体重为:(1 + 2 + 12)/3 = 5 kg

在称重的最后一年,贝拉重 7 公斤,查理 2.5 公斤,库珀 12 公斤。这意味着他们在最后一年的平均体重为:(7 + 2.5 + 12)/3 = 7.2 kg

这意味着幼犬的平均体重增加了 2.2 公斤,即从 5 公斤到 7.2 公斤。

我认为在 R 中,也许我需要使用 group_by

data2 <- data %>% group_by(puppy) %>% summarise(
  weight = mean(Weight)
)

从这里开始,我似乎无法理解这一点。我将不胜感激。

【问题讨论】:

    标签: r


    【解决方案1】:

    你可以arrangeMeasurement_Year的数据,保留firstlastWeight并减去它的mean值。

    library(dplyr)
    
    df %>%
      arrange(puppy, Measurement_Year) %>%
      group_by(puppy) %>%
      summarise(first = first(Weight), 
                last = last(Weight)) %>%
      summarise(diff_weigth = mean(last) - mean(first))
    
    #  diff_weigth
    #        <dbl>
    #1        2.17
    

    【讨论】:

      【解决方案2】:
      tmp=do.call(rbind,
        by(df,list(df$puppy),function(x){
          data.frame(
            "start"=head(x$Weight,1),
            "end"=tail(x$Weight,1)
          )
        })
      )
      
      mean(tmp$end)-mean(tmp$start)
      
      [1] 2.166667
      

      【讨论】:

      • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
      猜你喜欢
      • 1970-01-01
      • 2021-12-11
      • 2019-10-20
      • 1970-01-01
      相关资源
      最近更新 更多