Regroupement des observations et calcul des scores Z [dupliquer]

Aug 16 2020

Je travaille actuellement sur un ensemble de données climatiques et j'ai deux questions principales que je n'ai pas pu résoudre.

R = https://ufile.io/xnvy4coh

Données = https://ufile.io/u2dszh4x

  1. Y a-t-il un moyen de faire fondre le champ de saison avant sa colonne correspondante afin qu'il donne quelque chose comme ça https://imgur.com/dF3gNY0Je voudrais générer une nouvelle classe dans la colonne de saison nommée "Grow" qui contient la somme de ppt et la moyenne de chaque autre paramètre pour les mois de printemps et d'été. J'ai essayé à l'origine d'avoir prism_grouped avec une colonne pour l'année et chaque autre colonne et une observation individuelle, c'est-à-dire (spring_ppt_mm, summer_ppt_mm, fall_ppt_mm, winter_ppt_mm, ...) et le calculer à partir de là en utilisant mutate mais la fusion et la collecte des données m'ont toujours donné des résultats.

  2. Lorsque j'essaie de calculer le score z pour chaque saison, je reçois NaN rempli sur la base de données de sortie lorsque j'utilise cette approche:

    ressort <- prism_grouped%>%

    filtre (saison == "printemps")%>%

    muter (z_ppt_mm = échelle (ppt_mm))%>%

    muter (z_tmin_c = échelle (tmin_c))%>%

    muter (z_tmean_c = échelle (tmean_c))%>%

    muter (z_tmax_c = échelle (tmax_c))%>%

    muter (z_vdpmin_hpa = échelle (vdpmin_hpa))%>%

    muter (z_vdpmax_hpa = échelle (vdpmax_hpa))

mais obtenez un résultat valide si je fais ce qui suit:

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)

Actuellement, tout fonctionne avec la deuxième méthode, mais j'essaie de réduire le nombre de variables avec lesquelles je travaille et je préférerais les contenir dans des trames de données. Toute suggestion serait appréciée!

Réponses

2 RonakShah Aug 16 2020 at 05:45

Je ne comprends pas la première question, mais pour la deuxième, vous pouvez utiliser across(ou mutate_atdans l'ancienne dplyr) pour appliquer la même fonction à plusieurs colonnes. Quelque chose comme :

library(dplyr)

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