如何用R语言dplyr计算分组均值与行值的差值并生成新列
用dplyr实现分组均值差值计算
你需要将每个站点的海拔转换为相对于所在州平均海拔的差值,填充elev_normalized列,使用tidyverse中的dplyr工具可以快速完成:
完整代码实现
# 先加载tidyverse包(若未加载) library(tidyverse) # 按州分组计算并更新目标列 t <- t %>% group_by(us_state) %>% mutate(elev_normalized = elev_m - mean(elev_m, na.rm = TRUE)) %>% ungroup()
代码说明
group_by(us_state):以us_state为分组依据,让后续计算仅在每个州的范围内执行mutate(elev_normalized = elev_m - mean(elev_m, na.rm = TRUE)):生成(或覆盖)elev_normalized列,值为当前行海拔减去该州所有站点的海拔均值;na.rm = TRUE用于处理可能存在的缺失值,让计算更稳健ungroup():取消分组状态,避免后续数据操作受到分组限制
处理后的结果
执行代码后,你的tibble会更新为:
t # A tibble: 8 × 4 us_state site_n elev_m elev_normalized <chr> <int> <dbl> <dbl> 1 Louisiana 1 2 0 2 Louisiana 2 2 0 3 Louisiana 3 3 1 4 Louisiana 4 1 -1 5 Colorado 1 1600 -0.25 6 Colorado 2 1610 9.75 7 Colorado 3 1590 -10.25 8 Colorado 4 1601 0.75
可以看到,每个站点的elev_normalized值都准确对应了该站点海拔与所在州平均海拔的差值,比如路易斯安那州的平均海拔为2米,因此前4行的差值分别为0、0、1、-1,完全符合需求。
内容的提问来源于stack exchange,提问作者fre1990
相关产品推荐
相关产品推荐

