Saya sangat baru dalam pemrograman dan baru-baru ini mulai bereksperimen dengan R untuk tujuan analisis data. Saat ini saya mencoba membuat kolom baru di df saya berdasarkan nilai dari kolom lain dan menambahkan total curah hujan untuk masing-masing. Saya memperoleh data iklim saya dari situs grup iklim PRISM dan telah menambahkan kode berikut untuk memisahkan bidang tanggal yang diperoleh (1980-01) menjadi tahun dan bulan

climate <- tidyr::separate(climate,date, c("year", "month"), sep = "-") 

Pertanyaan saya adalah bagaimana saya bisa menambahkan kolom baru yang menambahkan teks berdasarkan bulan?

Pendekatan pseudocode saya saat ini adalah

if climate$month == 1,2,3 then climate$season == winter

else climate$month == 4,5,6 then climate$season == spring

else climate$month == 7,8,9 then climate$season == summer

else climate$month == 10,11,12 climate$season == fall

Tujuan saya adalah menghasilkan df baru dengan jumlah yang dihitung untuk curah hujan setiap musim setiap tahun sambil menghindari penggunaan Unggul

Terima kasih atas sarannya!

Dipecahkan, inilah hasil kerja akhir untuk referensi di masa mendatang:

#Read in PRSIM data
prism <- read.csv('PRISM.csv')

#Seperate Date into Year - Month
prism <- tidyr::separate(prism,date, c("year", "month"), sep = "-")

#Convert factor variable into numeric
library(dplyr)
prism <- prism %>% mutate(month= as.numeric(as.character(month)))

#Generate new season column based on month
prism <- prism %>% mutate(season = case_when(
  month < 4 ~ "winter",
  month < 7 ~ "spring",
  month < 10 ~ "summer",
  month < 13 ~ "fall",
  TRUE ~ NA_character_
))

#Generate new data frame with Year and sum of each seasons value
clima <-  prism %>% 
          group_by(year, season) %>% 
          summarise(ppt_mm = sum(ppt_mm), tmin_c = sum(tmin_c), tmean_c = sum(tmean_c), tmax_c = sum(tmax_c), vdpmin_hpa = sum(vdpmin_hpa), vdpmax_hpa = sum(vdpmax_hpa))

#By Season
spring <- clima[clima$season=="spring", ]
summer <- clima[clima$season=="summer", ] 
fall <- clima[clima$season=="fall", ] 
winter <- clima[clima$season=="winter", ]
r
1
k3r0 2 Mei 2020, 08:46

1 menjawab

Jawaban Terbaik

Anda dapat menggunakan dplyr::case_when. Ini lebih baik daripada kondisi rantai:

library(dplyr)

df %>% mutate(season = case_when(
  month < 3 ~ "winter",
  month < 7 ~ "spring",
  month < 10 ~ "summer",
  month < 13 ~ "fall",
  TRUE ~ NA_character_
))

month season
1      1 winter
2      2 winter
3      3 spring
4      4 spring
5      5 spring
6      6 spring
7      7 summer
8      8 summer
9      9 summer
10    10   fall
11    11   fall
12    12   fall
13    13   <NA>
0
linog 2 Mei 2020, 05:57