การจัดกลุ่มการสังเกตและการคำนวณคะแนน Z [ซ้ำ]

Aug 16 2020

ขณะนี้ฉันกำลังดำเนินการกับชุดข้อมูลสภาพอากาศและมีคำถามหลักสองข้อที่ยังไม่สามารถแก้ไขได้

R = https://ufile.io/xnvy4coh

ข้อมูล = https://ufile.io/u2dszh4x

  1. มีวิธีละลายฟิลด์ซีซั่นก่อนคอลัมน์ที่สอดคล้องกันหรือไม่เพื่อให้มันได้ผลลัพธ์แบบนี้ https://imgur.com/dF3gNY0ฉันต้องการสร้างคลาสใหม่ในคอลัมน์ฤดูกาลที่ชื่อ "grow" ซึ่งมีผลรวมของ ppt และค่าเฉลี่ยสำหรับพารามิเตอร์อื่น ๆ สำหรับเดือนฤดูใบไม้ผลิและฤดูร้อน เดิมทีฉันพยายามจัดกลุ่ม prism_group ด้วยคอลัมน์สำหรับปีและแต่ละคอลัมน์และการสังเกตแต่ละส่วนเช่น (spring_ppt_mm, summer_ppt_mm, fall_ppt_mm, winter_ppt_mm, ... ผล.

  2. เมื่อพยายามคำนวณคะแนน z สำหรับแต่ละฤดูกาลฉันจะได้รับ NaN เต็มในฐานข้อมูลผลลัพธ์เมื่อฉันใช้วิธีนี้:

    สปริง <- prism_grouped%>%

    กรอง (ฤดู == "ฤดูใบไม้ผลิ")%>%

    กลายพันธุ์ (z_ppt_mm = มาตราส่วน (ppt_mm))%>%

    กลายพันธุ์ (z_tmin_c = สเกล (tmin_c))%>%

    กลายพันธุ์ (z_tmean_c = สเกล (tmean_c))%>%

    กลายพันธุ์ (z_tmax_c = มาตราส่วน (tmax_c))%>%

    กลายพันธุ์ (z_vdpmin_hpa = สเกล (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}'))