按组计算平均差

时间:2021-01-12 08:01:49

标签: r

如果这是一个非常微不足道的问题,请原谅;我是 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)
)

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

2 个答案:

答案 0 :(得分:0)

您可以通过 arrange Measurement_Year 数据,保留 firstlast Weight 并减去它的 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

答案 1 :(得分:0)

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