跨多年迭代一个过程

Iterating a process across multiple years

我有多年的数据,我想将每年分为夏季和冬季。我已经能够一次做到一年,但我想知道是否有更有效的方法来做到这一点。有没有办法在每年的某个时间迭代我一年的所有内容?

library(lubridate)
library(tidyverse)

date <- rep_len(seq(dmy("01-01-2010"), dmy("31-12-2013"), by = "days"),1000)
ID <- rep(seq(1, 5), 100)

df <- data.frame(date = date,
                 x = runif(length(date), min = 60000, max = 80000),
                 y = runif(length(date), min = 800000, max = 900000),
                 ID)

df$month <- month(df$date)
df$year <- year(df$date)

df1 <- df %>%
  mutate(season_categ = case_when(month %in% 6:8 ~ 'summer',
                                  month %in% 1:3 ~ 'winter')) %>%
  group_by(ID, year, season_categ) 

summer_2013 <- df1 %>% 
  group_by(ID) %>% 
  filter(year == "2010" & season_categ == "summer")

winter_2013 <- df1 %>% 
  group_by(ID) %>% 
  filter(year == "2010" & season_categ == "winter")

我们可以 filter 通过 'season_categ' 然后使用 group_split(或 splitbase R)到 return a list 个数据集

library(dplyr)
winter_list <- df1 %>% 
                 filter(season_categ == 'winter') %>%
                 group_split(year)


summer_list <- df1 %>% 
                 filter(season_categ == 'summer') %>%
                 group_split(year)

base R

winter_sub <- subset(df1, season_categ == 'winter')
winter_list <- split(winter_sub, winter_sub$year)

summer_sub <- subset(df1, season_categ == 'summer')
summer_list <- split(winter_sub, summer_sub$year)

然后,我们可以用 lapply 遍历 list 并应用函数

lapply(summer_list, function(x) yourfun(x))