Grupowanie obserwacji i obliczanie wyników Z [duplikat]

Aug 16 2020

Obecnie pracuję nad zestawem danych klimatycznych i mam dwa główne pytania, których nie udało mi się rozwiązać.

R = https://ufile.io/xnvy4coh

Dane = https://ufile.io/u2dszh4x

  1. Czy istnieje sposób na stopienie pola pory roku przed odpowiadającą mu kolumną, aby uzyskać coś takiego https://imgur.com/dF3gNY0Chciałbym wygenerować nową klasę w kolumnie sezonu o nazwie „wzrost”, która zawiera sumę ppt i średnią dla każdego innego parametru dla miesięcy wiosennych i letnich. Początkowo próbowałem zgrupować prism_group z kolumną na rok i każdą inną kolumnę i indywidualną obserwację, tj. (Spring_ppt_mm, summer_ppt_mm, fall_ppt_mm, winter_ppt_mm, ...) i obliczanie go z tego miejsca za pomocą mutacji, ale topienie i gromadzenie danych zawsze dawało mi nieporozumienie wyniki.

  2. Podczas próby obliczenia wyniku z dla każdego sezonu otrzymuję wartość NaN w wyjściowej bazie danych, gdy używam tego podejścia:

    wiosna <- prism_grouped%>%

    filter (season == "spring")%>%

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

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

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

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

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

    mutate (z_vdpmax_hpa = scale (vdpmax_hpa))

ale uzyskam prawidłowy wynik, jeśli wykonam następujące czynności:

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)

Obecnie wszystko działa z drugą metodą, ale staram się zmniejszyć liczbę zmiennych, z którymi pracuję i wolałbym umieścić je w ramkach danych. Wszelkie sugestie będą mile widziane!

Odpowiedzi

2 RonakShah Aug 16 2020 at 05:45

Nie rozumiem pierwszego pytania, ale w przypadku drugiego możesz użyć across(lub mutate_atw starym dplyr), aby zastosować tę samą funkcję do wielu kolumn. Coś jak :

library(dplyr)

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