Agrupando observações e calculando pontuações Z [duplicado]

Aug 16 2020

Atualmente, estou trabalhando em um conjunto de dados climáticos e tenho duas perguntas principais que não consegui resolver.

R = https://ufile.io/xnvy4coh

Dados = https://ufile.io/u2dszh4x

  1. Existe uma maneira de derreter o campo da estação antes de sua coluna correspondente para que ele produza algo assim https://imgur.com/dF3gNY0Gostaria de gerar uma nova classe na coluna estação chamada "crescer", que contém a soma de ppt e a média de todos os outros parâmetros para os meses de primavera e verão. Eu originalmente tentei ter prism_grouped com uma coluna para o ano e cada coluna e observação individual, isto é (spring_ppt_mm, summer_ppt_mm, fall_ppt_mm, winter_ppt_mm, ...) e calculá-lo a partir daí usando mutate, mas derreter e reunir os dados sempre me deixou confuso resultados.

  2. Ao tentar calcular a pontuação z para cada temporada, recebo NaN preenchido no banco de dados de saída quando uso esta abordagem:

    spring <- prism_grouped%>%

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

    mutate (z_vdpmax_hpa = scale (vdpmax_hpa))

mas obter um resultado válido se eu fizer o seguinte:

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)

Atualmente, tenho tudo funcionando com o segundo método, mas estou tentando reduzir o número de variáveis ​​com as quais estou trabalhando e preferiria contê-las em quadros de dados. Qualquer sugestão seria apreciada!

Respostas

2 RonakShah Aug 16 2020 at 05:45

Não entendi a primeira pergunta, mas para a segunda você pode usar across(ou mutate_atno antigo dplyr) para aplicar a mesma função a várias colunas. Algo como :

library(dplyr)

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