Группирование наблюдений и вычисление Z-баллов [дубликат]

Aug 16 2020

В настоящее время я работаю над набором климатических данных, и у меня есть два основных вопроса, которые я не смог решить.

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%>%

    фильтр (сезон == "весна")%>%

    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))%>%

    изменить (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)

В настоящее время у меня все работает со вторым методом, но я пытаюсь уменьшить количество переменных, с которыми работаю, и предпочел бы содержать их во фреймах данных. Мы ценим любые предложения!

Ответы

2 RonakShah Aug 16 2020 at 05:45

Я не понимаю первый вопрос, но для второго вы можете использовать across(или mutate_atв старом dplyr), чтобы применить одну и ту же функцию к нескольким столбцам. Что-то вроде :

library(dplyr)

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