Gruppieren von Beobachtungen und Berechnen von Z-Scores [Duplikat]

Aug 16 2020

Ich arbeite derzeit an einem Klimadatensatz und habe zwei Hauptfragen, die ich nicht lösen konnte.

R = https://ufile.io/xnvy4coh

Daten = https://ufile.io/u2dszh4x

  1. Gibt es eine Möglichkeit, das Saisonfeld vor der entsprechenden Spalte zu schmelzen, sodass es so etwas ergibt? https://imgur.com/dF3gNY0Ich möchte eine neue Klasse in der Saisonspalte "wachsen" generieren, die die Summe von ppt und den Mittelwert für jeden anderen Parameter für die Frühlings- und Sommermonate enthält. Ich habe ursprünglich versucht, prism_group mit einer Spalte für das Jahr und jeder anderen Spalte und einzelnen Beobachtungen zu gruppieren, dh (spring_ppt_mm, summer_ppt_mm, fall_ppt_mm, winter_ppt_mm, ...) und es von dort aus mit Mutate zu berechnen, aber das Schmelzen und Sammeln der Daten gab mir immer Wonky Ergebnisse.

  2. Wenn ich versuche, den z-Wert für jede Saison zu berechnen, wird NaN in die Ausgabedatenbank eingetragen, wenn ich diesen Ansatz verwende:

    Frühling <- prism_grouped%>%

    Filter (Jahreszeit == "Frühling")%>%

    mutieren (z_ppt_mm = scale (ppt_mm))%>%

    mutieren (z_tmin_c = scale (tmin_c))%>%

    mutieren (z_tmean_c = scale (tmean_c))%>%

    mutieren (z_tmax_c = scale (tmax_c))%>%

    mutieren (z_vdpmin_hpa = scale (vdpmin_hpa))%>%

    mutieren (z_vdpmax_hpa = scale (vdpmax_hpa))

Erhalte aber ein gültiges Ergebnis, wenn ich Folgendes tue:

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)

Derzeit funktioniert alles mit der zweiten Methode, aber ich versuche, die Anzahl der Variablen, mit denen ich arbeite, zu reduzieren, und möchte sie lieber in Datenrahmen enthalten. Anregungen wäre dankbar!

Antworten

2 RonakShah Aug 16 2020 at 05:45

Ich verstehe die erste Frage nicht, aber für die zweite können Sie across(oder mutate_atin der alten dplyr) verwenden, um dieselbe Funktion auf mehrere Spalten anzuwenden. Etwas wie :

library(dplyr)

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