首页 > 解决方案 > 分组观察和计算 Z 分数

问题描述

我目前正在研究一个气候数据集,并且有两个我无法解决的主要问题。

R = https://ufile.io/xnvy4coh

数据 = https://ufile.io/u2dszh4x

  1. 有没有办法在其对应列之前融化季节字段,以便它产生类似https://imgur.com/dF3gNY0我想在名为“grow”的季节列中生成一个新类,其中包含总和ppt 以及春季和夏季月份的所有其他参数的平均值。我最初试图将 prism_grouped 与一年的列和其他列和个人观察,即(spring_ppt_mm,summer_ppt_mm,fall_ppt_mm,winter_ppt_mm,...)并使用 mutate 从那里计算它,但融化和收集数据总是让我很不稳定结果。

  2. 在尝试计算每个季节的 z 分数时,当我使用这种方法时,我会在输出数据库中填充 NaN:

    弹簧 <- prism_grouped %>%

    过滤器(季节==“春天”)%>%

    变异(z_ppt_mm = 比例(ppt_mm))%>%

    变异(z_tmin_c = 比例(tmin_c))%>%

    变异(z_tmean_c = 比例(tmean_c))%>%

    变异(z_tmax_c = 比例(tmax_c))%>%

    变异(z_vdpmin_hpa = 比例(vdpmin_hpa))%>%

    变异(z_vdpmax_hpa = 规模(vdpmax_hpa))

但如果我执行以下操作会得到有效的结果:

spring <- filter(prism_grouped,season == "spring")
z_spr_ppt <- scale(spring$ppt_mm)
z_spr_tmin <- scale(spring$tmin_c)
z_spr_tmean <- scale(spring$tmean_c)
z_spr_tmax <- scale(spring$tmax_c)
z_spr_vdpmin <- scale(spring$vdpmin_hpa)
z_spr_vdpmax <- scale(spring$vdpmax_hpa)

我目前可以使用第二种方法,但我正在尝试减少我正在使用的变量的数量,并且更愿意将它们包含在数据框中。任何建议,将不胜感激!

标签: rdplyr

解决方案


我不明白第一个问题,但对于第二个问题,您可以使用across(或mutate_at在 old 中dplyr)将相同的功能应用于多个列。就像是 :

library(dplyr)

spring <- prism_grouped %>%
  ungroup %>%
  filter(season == "spring") %>%
  mutate(across(ppt_mm:vdpmax_hpa, ~as.numeric(scale(.)), .names = 'z_{col}'))

推荐阅读