Mengelompokkan observasi dan menghitung skor Z [duplikat]

Aug 16 2020

Saya saat ini mengerjakan kumpulan data iklim dan memiliki dua pertanyaan utama yang belum dapat saya selesaikan.

R = https://ufile.io/xnvy4coh

Data = https://ufile.io/u2dszh4x

  1. Apakah ada cara untuk mencairkan bidang musim sebelum kolom yang sesuai sehingga menghasilkan sesuatu seperti ini https://imgur.com/dF3gNY0Saya ingin membuat kelas baru di kolom musim bernama "tumbuh" yang berisi jumlah ppt dan mean untuk setiap parameter lain untuk musim semi dan musim panas. Saya awalnya mencoba membuat prism_grouped dengan kolom untuk tahun dan kolom satu sama lain dan pengamatan individu yaitu (spring_ppt_mm, summer_ppt_mm, fall_ppt_mm, winter_ppt_mm, ...) dan menghitungnya dari sana menggunakan mutasi tetapi meleleh dan mengumpulkan data selalu memberi saya miring hasil.

  2. Saat mencoba menghitung skor z untuk setiap musim, saya mendapatkan NaN yang terisi di database keluaran saat saya menggunakan pendekatan ini:

    musim semi <- prism_grouped%>%

    filter (musim == "musim semi")%>%

    mutasi (z_ppt_mm = skala (ppt_mm))%>%

    mutasi (z_tmin_c = skala (tmin_c))%>%

    mutasi (z_tmean_c = skala (tmean_c))%>%

    mutasi (z_tmax_c = skala (tmax_c))%>%

    mutasi (z_vdpmin_hpa = skala (vdpmin_hpa))%>%

    mutasi (z_vdpmax_hpa = skala (vdpmax_hpa))

tetapi dapatkan hasil yang valid jika saya melakukan hal berikut:

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)

Saat ini saya memiliki semua yang bekerja dengan metode kedua tetapi saya mencoba untuk mengurangi jumlah variabel yang saya kerjakan dan lebih suka memuatnya dalam bingkai data. Setiap saran akan dihargai!

Jawaban

2 RonakShah Aug 16 2020 at 05:45

Saya tidak mengerti pertanyaan pertama tetapi untuk pertanyaan kedua Anda dapat menggunakan across(atau yang mutate_atlama dplyr) untuk menerapkan fungsi yang sama ke beberapa kolom. Sesuatu seperti :

library(dplyr)

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