Agrupar observaciones y calcular puntuaciones Z [duplicar]

Aug 16 2020

Actualmente estoy trabajando en un conjunto de datos climáticos y tengo dos preguntas principales que no he podido resolver.

R = https://ufile.io/xnvy4coh

Datos = https://ufile.io/u2dszh4x

  1. ¿Hay alguna manera de derretir el campo de temporada antes de su columna correspondiente para que produzca algo como esto? https://imgur.com/dF3gNY0Me gustaría generar una nueva clase en la columna de la temporada llamada "crecer" que contiene la suma de ppt y la media de cada otro parámetro para los meses de primavera y verano. Originalmente intenté tener prism_grouped con una columna para el año y cada columna y la observación individual, es decir (spring_ppt_mm, summer_ppt_mm, fall_ppt_mm, winter_ppt_mm, ...) y calcularlo desde allí usando mutate pero derretir y recopilar los datos siempre me dio problemas resultados.

  2. Cuando trato de calcular el puntaje z para cada temporada, obtengo NaN en la base de datos de salida cuando uso este enfoque:

    primavera <- prism_grouped%>%

    filter (temporada == "primavera")%>%

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

    mutar (z_vdpmax_hpa = escala (vdpmax_hpa))

pero obtengo un resultado válido si hago lo siguiente:

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)

Actualmente tengo todo funcionando con el segundo método, pero estoy tratando de reducir la cantidad de variables con las que estoy trabajando y preferiría contenerlas en marcos de datos. ¡Cualquier sugerencia sera apreciada!

Respuestas

2 RonakShah Aug 16 2020 at 05:45

No entiendo la primera pregunta, pero para la segunda puede usar across(o mutate_aten el antiguo dplyr) para aplicar la misma función a varias columnas. Algo como :

library(dplyr)

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