Agrupando observações e calculando pontuações Z [duplicado]
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
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.
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
Não entendi a primeira pergunta, mas para a segunda você pode usar across
(ou mutate_at
no 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}'))