R语言按分组计算幼犬首末次称重的体重均值差异实现方法
代码实现思路
你当前编写的代码和目标逻辑的偏差点:group_by(puppy) %>% summarise(weight = mean(Weight))计算的是每只幼犬所有测量记录的体重均值,和你需要的「每只犬首次、末次测量值的整体跨组平均」计算目标不匹配,只需要在分组逻辑里提取对应首末值,再做跨组统计即可得到目标结果。
完整可运行代码
我们基于你熟悉的dplyr管道语法实现,全程对齐你的手动计算逻辑:
# 加载dplyr包 library(dplyr) # 第一步:按幼犬分组,提取每只犬时间维度上的首次、末次称重值 puppy_measure_points <- data %>% # 组内按测量年份升序排列,避免原始数据排序混乱导致取错首末值 group_by(puppy) %>% arrange(Measurement_Year, .by_group = TRUE) %>% summarise( first_weigh_weight = first(Weight), # 排序后的第一条记录=首次称重体重 last_weigh_weight = last(Weight) # 排序后的最后一条记录=末次称重体重 ) # 第二步:跨组计算整体的首测平均、末测平均、体重变化值 weight_trend_result <- puppy_measure_points %>% summarise( overall_avg_first = mean(first_weigh_weight), overall_avg_last = mean(last_weigh_weight), overall_change = overall_avg_last - overall_avg_first )
计算结果校验
代码运行得到的数值和你手动计算的结果完全对齐:
- 单犬提取的首/末称重值:Bella(1.0kg, 7.0kg)、Charlie(2.0kg, 2.5kg)、Cooper(12.0kg, 12.0kg)
- 整体首次称重平均体重:
(1.0 + 2.0 + 12.0)/3 = 5.0kg - 整体末次称重平均体重:
(7.0 + 2.5 + 12.0)/3 ≈7.17kg - 整体平均体重变化:
≈2.17kg,和你手动算出的“较首次提升约2.2kg、整体呈上升趋势”的结论完全一致。
补充说明:这里特意在分组内加了
arrange(Measurement_Year)步骤,是为了避免原始数据集的测量记录顺序和年份顺序不一致时,直接取first()/last()会拿到非时间维度的首末值,保证计算结果严格对应“首次称重、末次称重”的时间定义。
内容的提问来源于stack exchange,提问作者Christie
相关产品推荐
相关产品推荐

