मेरे पास 40 से अधिक वर्षों के लिए दैनिक तापमान डेटा है। यहाँ नमूना डेटा है:

       date tmax
1   1971-01-01 18.9
2   1971-01-02 19.0
3   1971-01-03 19.5
4   1971-01-04 19.2
5   1971-01-05 19.5
.
.
.
17536   2020-12-29 19.7
17537   2020-12-30 18.9

मैं फसल की बढ़ती अवधि के लिए तापमान के औसत मूल्य की गणना करना चाहता हूं यानी प्रत्येक वर्ष 7 जून से 9 नवंबर तक। हम इसे r में कैसे कर सकते हैं?

0
Amrit 3 सितंबर 2021, 12:33

2 जवाब

सबसे बढ़िया उत्तर

यहाँ एक विकल्प है -

डेटा से दिनांक, माह और वर्ष प्राप्त करें, filter और केवल पंक्तियों को 7 जून से 9 नवंबर तक रखें और प्रत्येक year के लिए औसत tmax मान प्राप्त करें।

library(dplyr)
library(lubridate)

df %>%
  mutate(date = as.Date(date), 
         day = day(date), 
         month = month(date), 
         year = year(date)) %>%
  filter(between(month, 7, 10) | 
         day >= 7  & month == 6 | 
         day <= 9 & month == 11) %>%
  group_by(year) %>%
  summarise(tmax = mean(tmax, na.rm = TRUE))
0
Ronak Shah 3 सितंबर 2021, 10:13

नमूना डेटा

library(dplyr)
set.seed(1)
d <- tibble(date = seq(as.Date("1971-1-1"), Sys.Date(), by = "day")) %>%
        mutate(tmax = round(rnorm(nrow(d), 20, 3), 1))

एक साफ-सुथरा समाधान

library(lubridate)
library(tidyr)
d %>% 
   mutate(is_crop_season = date %within% interval(ISOdate(year(date), 6, 7), 
                                                  ISOdate(year(date), 11, 9))) %>%
   group_by(is_crop_season, year = year(date)) %>%
   summarise(mean = mean(tmax)) %>%
   pivot_wider(year, 
               is_crop_season, 
               names_glue = "{ifelse(is_crop_season, 'crop_season', 'no_crop_season')}", 
               values_from = mean)
1
thothal 3 सितंबर 2021, 10:03